国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript類和繼承 prototype屬性

2019-11-21 00:15:54
字體:
來源:轉載
供稿:網友
我們已經在第一章中使用prototype屬性模擬類和繼承的實現。 prototype屬性本質上還是一個JavaScript對象。 并且每個函數都有一個默認的prototype屬性。
如果這個函數被用在創建自定義對象的場景中,我們稱這個函數為構造函數。 比如下面一個簡單的場景:
復制代碼 代碼如下:

// 構造函數
function Person(name) {
this.name = name;
}
// 定義Person的原型,原型中的屬性可以被自定義對象引用
Person.prototype = {
getName: function() {
return this.name;
}
}
var zhang = new Person("ZhangSan");
console.log(zhang.getName()); // "ZhangSan"

作為類比,我們考慮下JavaScript中的數據類型 - 字符串(String)、數字(Number)、數組(Array)、對象(Object)、日期(Date)等。 我們有理由相信,在JavaScript內部這些類型都是作為構造函數來實現的,比如:
復制代碼 代碼如下:

// 定義數組的構造函數,作為JavaScript的一種預定義類型
function Array() {
// ...
}
// 初始化數組的實例
var arr1 = new Array(1, 56, 34, 12);
// 但是,我們更傾向于如下的語法定義:
var arr2 = [1, 56, 34, 12];

同時對數組操作的很多方法(比如concat、join、push)應該也是在prototype屬性中定義的。
實際上,JavaScript所有的固有數據類型都具有只讀的prototype屬性(這是可以理解的:因為如果修改了這些類型的prototype屬性,則哪些預定義的方法就消失了), 但是我們可以向其中添加自己的擴展方法。
復制代碼 代碼如下:

// 向JavaScript固有類型Array擴展一個獲取最小值的方法
Array.prototype.min = function() {
var min = this[0];
for (var i = 1; i < this.length; i++) {
if (this[i] < min) {
min = this[i];
}
}
return min;
};
// 在任意Array的實例上調用min方法
console.log([1, 56, 34, 12].min()); // 1

注意:這里有一個陷阱,向Array的原型中添加擴展方法后,當使用for-in循環數組時,這個擴展方法也會被循環出來。
下面的代碼說明這一點(假設已經向Array的原型中擴展了min方法):
復制代碼 代碼如下:

var arr = [1, 56, 34, 12];
var total = 0;
for (var i in arr) {
total += parseInt(arr[i], 10);
}
console.log(total); // NaN

解決方法也很簡單:
復制代碼 代碼如下:

var arr = [1, 56, 34, 12];
var total = 0;
for (var i in arr) {
if (arr.hasOwnProperty(i)) {
total += parseInt(arr[i], 10);
}
}
console.log(total); // 103
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄山市| 马山县| 麻栗坡县| 车险| 伊金霍洛旗| 阳西县| 平湖市| 新余市| 固安县| 美姑县| 福州市| 准格尔旗| 张家界市| 谢通门县| 武汉市| 衡南县| 高碑店市| 南充市| 华蓥市| 无为县| 游戏| 沂水县| 龙南县| 大姚县| 阳朔县| 嫩江县| 同仁县| 闵行区| 资溪县| 肥城市| 郁南县| 玛沁县| 交城县| 涡阳县| 隆回县| 赫章县| 厦门市| 三门峡市| 泽普县| 泽普县| 兰州市|