2009-10-20 114 views
46
STORE = { 
    item : function() { 
    } 
}; 
STORE.item.prototype.add = function() { alert('test 123'); }; 
STORE.item.add(); 

我一直在試圖弄清楚這有什麼不對。爲什麼這不起作用?然而,它的工作原理,當我使用如下:將原型添加到JavaScript對象文字

STORE.item.prototype.add(); 

回答

71

原型對象,就是要在constructor functions使用,將使用new operator創建新的對象實例調用基本功能。在JavaScript

函數是first-class對象,這意味着你可以添加成員,對他們對待他們就像普通的物體:

var STORE = { 
    item : function() { 
    } 
}; 

STORE.item.add = function() { alert('test 123'); }; 
STORE.item.add(); 

正如我以前說過的一個典型應用原型對象的,是當你實例一個目的是通過調用與新的操作者一個構造函數,例如:

function SomeObject() {} // a constructor function 
SomeObject.prototype.someMethod = function() {}; 

var obj = new SomeObject(); 

所有SomeObject的實例將繼承SomeObject.prototype成員,因爲那些成員將第被訪問粗糙的原型鏈。

JavaScript中的每個函數都有一個原型對象,因爲無法知道哪些函數將用作構造函數。

+0

非常感謝您的解釋和鏈接!現在對我來說更清楚了。 :) – John 2009-10-20 04:44:33

+0

不客氣@約翰,很高興幫助! – CMS 2009-10-20 04:46:02

+1

偉大的解釋!豎起大拇指!! – 2009-10-20 09:54:18

2

您可以使用JSON revivers在解析時將您的JSON轉換爲類對象。 ECMAScript的5草案已經通過在http://JSON.org/js.html

var myObject = JSON.parse(myJSONtext, reviver); 

可選齊磊參數是 功能將被調用用於在 最終結果的每一個電平每 鍵和值描述的JSON2齊磊方案。每個值將由 函數的結果替換爲 。這可用於將 通用對象重構爲 僞類的實例,或將日期 字符串轉換爲Date對象。

myData = JSON.parse(text, function (key, value) { 
    var type; 
    if (value && typeof value === 'object') { 
     type = value.type; 
     if (typeof type === 'string' && typeof window[type] === 'function') { 
      return new (window[type])(value); 
     } 
    } 
    return value; 
}); 
+0

很高興知道這些信息。 +1。一個更詳細的例子與myJSONtext和類型的功能細節會更好,但無論如何感謝這個信息! – 2016-03-17 07:09:00

9

多年後,JavaScript時(ES2015到達),我們終於Object.setPrototypeOf()方法

const STORE = { 
 
    item: function() {} 
 
}; 
 

 

 
Object.setPrototypeOf(STORE.item, { 
 
    add: function() { 
 
    alert('test 123'); 
 
    } 
 
}) 
 

 

 
STORE.item.add();

1

寫這篇文章,這是可以通過使用__proto__財產。以防萬一任何人目前正在檢查,可能在將來。

const dog = { 
    name: 'canine', 
    bark: function() { 
     console.log('woof woof!') 
    } 
} 

const pug = {} 
pug.__proto__ = dog; 

pug.bark(); 

然而,在這種情況下,添加原型的推薦的方法是使用Object.create。所以上面的代碼將被轉換爲:

const pug = Object.create(dog) 

pug.bark(); 

或者你也可以使用Object.setPrototypeOf作爲一個答案提及。

希望有所幫助。