我典型的例子就是下面的僞代碼:有沒有在JavaScript中實例化一個不一定是函數的對象的方法?
var kind = ...;
...
var type = new kind();
...
var person = new type();
...
var john = new person();
但這裏的問題是,type
不是一個功能,使new type()
將無法正常工作。 是否有一個特定的屬性,您可以添加到對象以使其可以被new
接受?
最重要的是原型鏈,這對我來說很重要,那就是person.[[Prototype]]
應該是type
等,以防new
不可能的情況。
創建子類型鏈不是一個選項。這裏type
是person
的元類型,而不是它的超類型。同樣kind
是一個元元類型。下面的測試可以明確的要求: 當全部完成,我希望這些積極的測試:
console.log(john instanceof person); // should be true
console.log(person instanceof type); // should be true
console.log(type instanceof kind); // should be true
和這些負面測試:
console.log(john instanceof type); // should be false
console.log(john instanceof kind); // should be false
console.log(person instanceof kind); // should be false
我聽說,通過分配到__proto__
屬性的一個可以做這種魔術,但不知道如何。顯然,一個便攜式解決方案(例如使用Object.create
)是非常受歡迎的,如果有的話。
那麼,你只是試圖創建一個「人」,這是一個「類型」,這是一種「親切」?所以每當你創造一個新的「人」時,你就隱含地創造出一種新的「種類」,並自動獲得該類型的所有功能? –
不,我不想要一個子類型鏈,我想'person'是'type'的實例,就像'john'是'person'的實例一樣。 – Saintali
這很混亂,特別是你對FunkyFresh的回答發表評論。 1)你想要一個is-a類型的關係嗎? 2)你不想從基類繼承任何結構或功能? –