[英]How to create an object from a prototype in JavaScript?
我是JavaScript的新手,目前正在閱讀“ JavaScript:好的零件”一書。 我試圖了解以下內容:
function create(proto) {
var F = function() { };
F.prototype = proto;
return new F();
}
function create2(proto) {
var o = { };
o.prototype = proto;
return o;
}
var o = { }, c1 = create(o), c2 = create2(o);
o.status = 'OK';
document.writeln(c1.status);
document.writeln(c2.status);
create(proto)
是本書中的完成方式。 create2(proto)
是我認為應該工作的方式。 顯然,本書中的示例在我的不是,但是在工作,因此輸出為:
OK
undefined
現在我的問題是:為什么create2(proto)
不能像create(proto)
一樣工作?
在create
,您將借助於構造函數( new F()
)創建一個新對象。 因此,原型鏈被建立,間proto
對象和具有構造函數構造的對象。
在create2
,您將創建一個Object並在其上創建一個名為prototype
的屬性。 在這種情況下,不會建立原型鏈。
這就是為什么create2
創建的對象無法沿着原型鏈向上查找status
。
注意:在第二種情況下,您仍然可以
document.writeln(c2.prototype.status);
在create2方法中,如果您需要標准原型而不是標准“原型”。 如果要使其工作,則需要使用Object.setPrototypeOf(o, proto)
新創建的屬性“ prototype”將是衛星對象,該對象將具有到父對象的符號鏈接。
function create(proto) {
var F = function() { };
F.prototype = proto;
return new F();
}
function create2(proto) {
var o = { };
Object.setPrototypeOf(o, proto);
return o;
}
var o = { }, c1 = create(o), c2 = create2(o);
o.status = 'OK';
console.log(c1.status);
console.log(c2.status);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.