對(duì)象之間發(fā)生的JavaScript繼承是通過原型完成的。
JavaScript的內(nèi)置繼承方法稱為原型鏈,或原型遺傳。
對(duì)象實(shí)例從原型繼承屬性。
這是原型鏈:一個(gè)對(duì)象繼承自它的原型,而該原型繼而從其原型繼承,等等。
所有對(duì)象都自動(dòng)繼承自O(shè)bject除非另有規(guī)定。
所有對(duì)象都繼承自O(shè)bject.prototype。
通過對(duì)象字面量定義的任何對(duì)象的[[Prototype]]設(shè)置為Object.prototype。
var book = {
title : "JavaScript"
};
var prototype = Object.getPrototypeOf(book);
console.log(prototype === Object.prototype); // true
在過去幾章中使用的幾種方法是在Object.prototype上定義,因此被所有其他對(duì)象繼承。
這些方法是:
描述 | 描述 |
---|---|
hasOwnProperty() | 確定是否存在具有給定名稱的自有屬性 |
propertyIsEnumerable() | 確定自己的屬性是否是可枚舉的 |
isPrototypeOf() | 確定對(duì)象是否是另一個(gè)的原型 |
valueOf() | 返回對(duì)象的值表示形式 |
toString() | 返回對(duì)象的字符串表示形式 |
這五個(gè)方法都是從Object。
每當(dāng)在對(duì)象上使用運(yùn)算符時(shí),就會(huì)調(diào)用valueOf()方法。
默認(rèn)情況下,valueOf()返回對(duì)象實(shí)例。
原始包裝器類型覆蓋valueOf(),以便它返回一個(gè)字符串forString,布爾值的布爾值和Number的數(shù)字。
Date對(duì)象的valueOf()方法返回以毫秒為單位的歷元時(shí)間。
以下代碼顯示如何在與比較運(yùn)算符一起使用時(shí)調(diào)用valueOf()方法。
var now = new Date();
var earlier = new Date(2010, 1, 1);
console.log(now > earlier); // true
上面的代碼生成以下結(jié)果。
上面的代碼生成以下結(jié)果。...
每當(dāng)JavaScript期望一個(gè)字符串時(shí),它也會(huì)對(duì)原語值進(jìn)行隱式調(diào)用。
每當(dāng)JavaScript期望一個(gè)字符串時(shí),它也會(huì)對(duì)原語值進(jìn)行隱式調(diào)用。...
var book = {
title : "JavaScript"
}; /*from ww w . j a va 2 s . c o m*/
var message = "Book = " + book;
console.log(message); // "Book = [object Object]"
var book = {
title : "JavaScript",
toString : function() {
return "[Book " + this.title + "]"
}
};
var message = "Book = " + book;
console.log(message);
上面的代碼生成以下結(jié)果。
默認(rèn)情況下,所有對(duì)象從Object.prototype繼承,因此對(duì)Object的更改會(huì)影響所有對(duì)象。
Object.prototype.add = function(value) {
return this + value; /*from w w w. j a v a2 s. c o m*/
};
var book = {
title : "Javascript"
};
console.log(book.add(5));
console.log("title".add("end"));
上面的代碼生成以下結(jié)果。
更多建議: