Javascript原型

2018-01-06 19:14 更新

Javascript面向?qū)ο笤O計 - Javascript原型


當使用構(gòu)造函數(shù)創(chuàng)建對象時,每個實例都有自己的writeLine()方法。

如果我們有100個實例的書,有writeLine方法的100個副本。

我們可以使用原型只有一個方法的副本。

該原型在所有對象實例之間共享,并且這些實例可以訪問屬性的原型。

我們可以通過使用以下函數(shù)來確定屬性是否在原型上:


function Book(name) { /*from   w w  w .  j  a v a  2  s  . co m*/
   this.name = name; 
   this.writeLine = function() { 
        console.log(this.name); 
    }; 
} 

var book = new Book("Javascript"); 

function hasPrototypeProperty(object, name) { 
    return name in object && !object.hasOwnProperty(name); 
} 

console.log(hasPrototypeProperty(book, "name"));             // false 
console.log(hasPrototypeProperty(book, "hasOwnProperty"));    // true 

上面的代碼生成以下結(jié)果。

上面的代碼生成以下結(jié)果。...



[[Prototype]]屬性

實例通過內(nèi)部屬性跟蹤其原型稱為[[原型]]。

實例通過內(nèi)部屬性跟蹤其原型稱為[[原型]]。...

我們可以通過使用來讀取[[Prototype]]屬性的值Object.getPrototypeOf()方法。

我們可以通過使用來讀取[[Prototype]]屬性的值Object.getPrototypeOf()方法。...


var object = {}; 
var prototype = Object.getPrototypeOf(object); 

console.log(prototype === Object.prototype);            // true 

我們還可以測試看一個對象是否是另一個對象的原型使用isPrototypeOf()方法,它包含在所有對象上:


var object = {}; 

console.log(Object.prototype.isPrototypeOf(object));    // true 

當對一個對象讀取屬性時,首先是JavaScript引擎搜索具有該名稱的自己的屬性。

如果引擎找到一個正確命名的屬性,它返回該值。

如果沒有自己的財產(chǎn)name存在于目標對象上,JavaScript搜索[[Prototype]]對象。

如果存在具有該名稱的原型屬性,則值的屬性返回。

如果搜索結(jié)束而沒有找到屬性具有正確的名稱,返回undefined。



注意

請考慮以下情況,其中首先創(chuàng)建一個對象,但不具有任何自己的屬性:


var object = {}; 
/*from  www.  j  av  a2 s . c o m*/
console.log(object.toString());    // "[object Object]" 

object.toString = function() { 
    return "[object Custom]"; 
}; 

console.log(object.toString());    // "[object Custom]" 

// delete own property 
delete object.toString; 
console.log(object.toString());    // "[object Object]" 

// no effect - delete only works on own properties 
delete object.toString; 
console.log(object.toString());    // "[object Object]" 

上面的代碼生成以下結(jié)果。

我們不能為一個實例的prototype屬性賦值。

將值分配給toString會在實例上創(chuàng)建一個新的屬性,使原型上的屬性保持不變。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號