gpt4 book ai didi

javascript - 为什么 'call()' 会向 Function 的实例添加属性?? (见小代码)

转载 作者:行者123 更新时间:2023-11-30 07:27:36 28 4
gpt4 key购买 nike

为什么仅通过使用 call 就可以向名为 jcEmployee 实例添加属性?

我想知道为什么 jc.hasOwnProperty('firstName'); 结果为 true

我什至还没有做 prototype 继承呢。这就是所有代码,不多也不少:

我知道 call 只是在传入参数时更改了 this,但要添加属性?我不知道发生了什么......

function Person(firstName, lastName){
this.firstName = firstName;
this.lastName = lastName;
}
function Employee(firstName, lastName, position){
Person.call(this,firstName,lastName);
this.position = position;
}
var jc = new Employee('JC','Viray','Developer');
jc.hasOwnProperty('firstName'); //true

更新

我现在明白了。我的问题的解决方案是:停止以 C#/Java 的心态思考.. 我忘记了 Person 仍然 FUNCTION 尽管它是一个“构造函数类型函数”... -_- 一旦是函数,仍然是函数..

最佳答案

I'm wondering why jc.hasOwnProperty('firstName'); results to true.

因为 Person 函数中的这一行:

this.firstName = firstName;

当你说

Person.call(this, firstName, lastName);

您实际上是在调用 Person 函数,并告诉 Person 设置它的 this 第一个参数中提供的值——在您的例子中,是您正在构建的 Employee 对象。 call 的后续参数将作为常规参数传递。

结果,Person 被调用,this 设置为您当前的 Employee 对象,并选择一个 firstNamelastName 属性。


或者考虑另一个例子。

var obj = { };
Person.call(obj, "Adam", "Rackis");
obj.hasOwnProperty('firstName'); //still true

关于javascript - 为什么 'call()' 会向 Function 的实例添加属性?? (见小代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9437312/

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