gpt4 book ai didi

javascript - 方法与函数调用模式

转载 作者:行者123 更新时间:2023-11-29 10:13:51 27 4
gpt4 key购买 nike

我从 taylormcgann 中选取了这个示例.在我问我的问题之前,让我声明我是 JavaScript 的新手并且很难理解这些概念。

在我提到的链接中,方法调用模式是这样定义的:

var person = {
name: 'Calvin',
age: 25,
greet: function () {
alert('My name is ' + this.name + '.');
}
};
person.greet(); //My name is Calvin.

很公平。 greet() 被定义为一个方法,并被这样访问。现在是函数调用模式:

// Add a new method to person
person.calculateAge = function (yearsFromNow) {
var self = this;

function yearsOld() {
return self.age + yearsFromNow;
}

alert('I will be ' + yearsOld() + ' years old ' + yearsFromNow + ' years from now.');
}
person.calculateAge(10); //I will be 35 years old 10 years from now.

我无法理解这究竟是如何成为函数调用的?我可以测试并验证 this 对象引用 window,但调用语法与上面相同。这真的是方法和函数调用模式之间的区别吗,一种是在对象内部定义的,另一种是在某种程度上在外部定义的?我来自 C/C++ 背景,所以你可以理解这对我来说有多么令人惊讶。

欢迎提出任何想法。

最佳答案

person.calculateAgeperson.greet 之间没有区别,因为两者都将作为属性添加到“person”对象。然而,作者试图解释如何在不同的执行上下文中设置“this”关键字,这通常不取决于函数定义的位置,而是取决于函数的调用方式。
在上述两种情况下,“this”关键字都将设置为“person”对象,因为这些方法由“person”调用。然而,在调用 yearsOld() 方法时,它将不再指向 'person' 对象,因为它被 person.calculateAge 调用。
我建议看看 Mozilla Dev link理解“this”。

关于javascript - 方法与函数调用模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27099149/

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