Javascript繼承

2018-01-06 19:14 更新

Javascript面向對象設計 - Javascript繼承


對象之間發(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繼承

在過去幾章中使用的幾種方法是在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 

上面的代碼生成以下結果。

toString()

上面的代碼生成以下結果。...

每當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.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"));    

上面的代碼生成以下結果。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號