對象之間發(fā)生的JavaScript繼承是通過原型完成的。
JavaScript的內置繼承方法稱為原型鏈,或原型遺傳。
對象實例從原型繼承屬性。
這是原型鏈:一個對象繼承自它的原型,而該原型繼而從其原型繼承,等等。
所有對象都自動繼承自Object除非另有規(guī)定。
所有對象都繼承自Object.prototype。
通過對象字面量定義的任何對象的[[Prototype]]設置為Object.prototype。
var book = {
title : "JavaScript"
};
var prototype = Object.getPrototypeOf(book);
console.log(prototype === Object.prototype); // true
在過去幾章中使用的幾種方法是在Object.prototype上定義,因此被所有其他對象繼承。
這些方法是:
描述 | 描述 |
---|---|
hasOwnProperty() | 確定是否存在具有給定名稱的自有屬性 |
propertyIsEnumerable() | 確定自己的屬性是否是可枚舉的 |
isPrototypeOf() | 確定對象是否是另一個的原型 |
valueOf() | 返回對象的值表示形式 |
toString() | 返回對象的字符串表示形式 |
這五個方法都是從Object。
每當在對象上使用運算符時,就會調用valueOf()方法。
默認情況下,valueOf()返回對象實例。
原始包裝器類型覆蓋valueOf(),以便它返回一個字符串forString,布爾值的布爾值和Number的數字。
Date對象的valueOf()方法返回以毫秒為單位的歷元時間。
以下代碼顯示如何在與比較運算符一起使用時調用valueOf()方法。
var now = new Date();
var earlier = new Date(2010, 1, 1);
console.log(now > earlier); // true
上面的代碼生成以下結果。
上面的代碼生成以下結果。...
每當JavaScript期望一個字符串時,它也會對原語值進行隱式調用。
每當JavaScript期望一個字符串時,它也會對原語值進行隱式調用。...
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);
上面的代碼生成以下結果。
默認情況下,所有對象從Object.prototype繼承,因此對Object的更改會影響所有對象。
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"));
上面的代碼生成以下結果。
更多建議: