gpt4 book ai didi

javascript - 对javascript中的原型(prototype)感到困惑

转载 作者:行者123 更新时间:2023-11-30 17:41:57 26 4
gpt4 key购买 nike

var y=function(){
return new y.prototype.greeting();
}
y.prototype={
greeting:function(){
alert("hello world");
}
}

new y();

上面的代码会提示("hello world");

但是如果我删除 .prototype 并将该行更改为 return new y.greeting();

会发生错误:

undefined is not a function

var y=function(){
return new y.greeting();
}
y.prototype={
greeting:function(){
alert("hello world");
}
}

new y();

为什么这里没有prototype就不能调用greeting方法?

非常感谢

最佳答案

y 是一个函数,[[Prototype]]Function - 所以当你要求解释器查找 y.greeting,它首先查看 y 本身,然后检查 Function.prototype,然后检查 Object.prototype.

当您创建 new y 时,yprototype 属性将设置在对象上被 build 。所以如果你执行 new (new y()).greetings() 那么你会得到你的 alert

另一种思考方式是构造函数的 prototype 属性是将通过调用 new constructor< 创建的任何子对象的 prototype/。构造函数的实际内部 [[Prototype]] 将始终基于构造的任何内容。

你可以在我下面放在一起的例子中看到这一点。 Object.getPrototypeOf 将返回内部的 [[Prototype]] 属性,因此我们可以看到实际发生了什么:

> var test = function() {}
> Object.getPrototypeOf(test)
function Empty() {}

// Setting the prototype property
// does not change the [[Prototype]] of test
> test.prototype = {x: 1}
> Object.getPrototypeOf(test)
function Empty() {}

// But it *does* change the prototype of
// objects *created by* test.
> var x = new test
> Object.getPrototypeOf(x)
Object {x: 1}

关于javascript - 对javascript中的原型(prototype)感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20900033/

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