簡體   English   中英

如何從JavaScript中的原型創建對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM