gpt4 book ai didi

javascript - 将函数原型(prototype)设置为 null 对新创建的 javascript 对象没有影响

转载 作者:行者123 更新时间:2023-11-28 06:46:24 25 4
gpt4 key购买 nike

我正在使用以下代码:

function Tmp(){}
var tmp = new Tmp()
Tmp.prototype.f1 = function(){console.log("f1");}

tmp.f1() -> output: f1
Tmp.prototype.f1 = function(){console.log("f1 update");}
tmp.f1() -> output: f1 update

//this is confusing
Tmp.prototype = null;
tmp.f1() -> output still: f1 update

我的问题是:当我设置 Tmp.prototype = null; 时为什么它对 tmp.f1() 没有影响。换句话说,tmp.f1() 仍然输出相同的结果。我的理解是 tmp.f1() 将递归检查原型(prototype)链中的属性,如果该方法可用,则调用该方法。但是通过设置 Tmp.prototype = null,我预计 tmp.f1 将是未定义的,但事实并非如此。

谢谢。

最佳答案

规范中最好的引用可能是 9.1.14 OrdinaryCreateFromConstructor .

但是,您可以自己测试一下。

// Constructor, has a default prototype object that
// is a plain Object
function Foo(){}

// Instance has its internal [[Prototype]] set to the
// constructor's prototype when it's created
var foo = new Foo();

// See?
document.write(Object.getPrototypeOf(foo) === Foo.prototype); // true

// Keep reference to Foo.prototpye
var originalFooProto = Foo.prototype;

// Change Foo.prototype
Foo.prototype = {};

// Create another instance
foo2 = new Foo();

// Current Foo.prototype is not original
document.write('<br>' + (originalFooProto === Foo.prototype)) // false

// foo's internal prototype is not Foo's new prototype
document.write('<br>' + (Object.getPrototypeOf(foo) === Foo.prototype)) // false

// foo's internal prototype is still the old Foo.prototype
document.write('<br>' + (Object.getPrototypeOf(foo) === originalFooProto)) // true

// foo2's internal prototype is the new Foo.prototype
document.write('<br>' + (Object.getPrototypeOf(foo2) === Foo.prototype)) // true

关于javascript - 将函数原型(prototype)设置为 null 对新创建的 javascript 对象没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33384266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com