Javascript繼承

2018-01-06 19:14 更新

Javascript面向?qū)ο笤O(shè)計(jì) - Javascript繼承


對(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繼承

在過去幾章中使用的幾種方法是在Object.prototype上定義,因此被所有其他對(duì)象繼承。

這些方法是:

描述 描述
hasOwnProperty() 確定是否存在具有給定名稱的自有屬性
propertyIsEnumerable() 確定自己的屬性是否是可枚舉的
isPrototypeOf() 確定對(duì)象是否是另一個(gè)的原型
valueOf() 返回對(duì)象的值表示形式
toString() 返回對(duì)象的字符串表示形式

這五個(gè)方法都是從Object。



的價(jià)值()

每當(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é)果。

toString()

上面的代碼生成以下結(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é)果。

修改Object.prototype

默認(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é)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)