我在JS 规范中找不到函数的任何地方 - 调用时new
应该将constructor
其原型的属性设置为自己。
当然规范说内置构造函数(对象,数组,字符串,&c)都将它们的prototype.constructor
属性设置为自己(即Object.prototype.constructor = Object
)但我找不到任何地方说这必须/应该发生在其他构造函数(似乎应该拼写在[[Construct]]
(13.2.2 [[Construct]]
) 部分中,但它不是:
function F() {};
var obj = new F();
Object.getPrototypeOf(obj).constructor == F; // non-standard?? I can't find where in spec
我问是因为我看到很多代码将构造函数的prototype.constructor 属性“重置”回自身 - 但是这个属性首先指向构造函数似乎是非标准的?
function F() {};
F.prototype = new Parent();
F.prototype.constructor = F; // 'reset' it cuz it changed! (according to spec it should never have been set? Except in Object.prototype.
JS 程序员是否可以/应该依赖这种非标准(?)期望,即如果未设置原型属性,构造函数的prototype.constructor 属性将指向构造函数本身?
V8 肯定会这样做:
function F() {};
console.log(F.prototype.constructor === F); // true! WHY??? not in spec? Should be Object?
希望这有模糊的意义 - 谢谢!标记
PS由于它们的可变性,我只会依赖instanceof
而不是使用该constructor
属性。