我在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属性。