2016-09-06 234 views
0

我是JS的新手,我在代碼下面寫道,但是我得到了錯誤「Prototype is not defined」。JS原型錯誤「Prototype is not defined」

var proto = { 
    describe: function() { 
     return 'name: ' + this.name; 
    } 
}; 

var obj = {     
    [[Prototype]]: proto, //error in this line 
    name:'obj' 
}; 

console.log(proto.describe()); 
console.log(obj.describe()); 
+0

[原型]是一個內部的財產,不是有效的名稱爲關鍵。你想使用'Object.create' – Bergi

回答

1

[[Prototype]]只是內部屬性(原型鏈中的鏈接)的規範語音。要通過原型鏈鏈接objproto,您可以使用Object.create

var obj = Object.create(proto); 
    obj.name = 'obj'; 
在ES6/ES2015

或者Object.setPrototypeOf

var obj = {     
     name:'obj' 
    }; 

    Object.setPrototypeOf(obj, proto); 

另外,有遺留財產__proto__,其本身未必推薦雖然:

var obj = {     
     __proto__: proto, 
     name:'obj' 
    }; 
+0

不要使用'__proto__'。它已被ES6官方廢棄。如果必須,請使用Object.setPrototypeOf。 – Bergi

+0

哦,我還沒有意識到,Allen Wirfs-Brock甚至「推薦」使用它:https://twitter.com/awbjs/status/730789464021159938。 'Object.setPrototypeOf'修改了一個活體對象的原型,所以會有性能問題。對象字面上的'__proto__'應該可以避免這種情況。看起來像沒有乾淨的方法來鏈接對象文字了... – nils

+0

如果Object.setPrototypeOf'在對象創建後立即使用,它不應該有性能影響。 – Bergi

相關問題