簡體   English   中英

用原型鏈定義函數

[英]Define a function with a prototype chain

假設我有一個對象X定義為

var X = function () {};
X.prototype.doSomething = function () {};
X.prototype.doSomethingElse = function () {};

是否可以構造一個函數 f使f instanceof X 請注意,我還必須能夠在沒有TypeError情況下執行f()


在Mozilla中,我可以使用__proto__完全完成我想做的事情:

var f = function () {};
f.__proto__ = new X;

但是,這是(1)非標准且(2)已棄用。 MDN的__proto__頁面建議使用Object.getPrototypeOf代替,但是我真正要尋找的是Object.setPrototypeOf (雖然這個想法在此錯誤報告中提到 )不存在。

我想要的便宜的近似值是

var f = function () {};
jQuery.extend(f, new X);

不幸的是,這不能使f instanceof X true(我也不希望如此!)。

不,這是不可能的(以標准方式)。 創建可調用對象(即函數)的每種可能性都會創建一個從Function.prototype 1繼承的對象; 之后,您將無法更改對象的[[prototype]] 2

也可以看看:

1:好的,ES6允許我們將Function子類化 但這並沒有聽起來那么有用。
2:從ES6開始,可以使用Object.setPrototypeOf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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