方法与函数调用模式

时间:2014-11-24 06:37:44

标签: javascript

我从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 ++背景,所以你可以理解这对我来说有多么令人惊讶。

欢迎任何想法。

4 个答案:

答案 0 :(得分:2)

person.calculateAgeperson.greet之间没有区别,因为两者都会作为属性添加到“#1}”和“{1}}之间。宾语。然而,作者试图解释' this'在不同的执行上下文中设置关键字,这通常不依赖于函数的定义位置,而是取决于函数的调用方式。
在上述this' person'关键字将设置为' yearsOld()'对象,因为这些方法是由人员调用的。然而,在调用person.calculateAge方法时,它将不再指向“人”#39;对象,因为this正在调用它 我建议您查看Mozilla Dev link以了解' {{1}}'。

答案 1 :(得分:2)

我将为您提供一个简单的示例,它将区分方法调用和函数调用。

var x = 3;

var foo = {
     x: 2,
     baz: {
        x: 1,
        bar: function() {
            return this.x;
        }
    }
}

var go = foo.baz.bar;

alert(go());//3
alert(foo.baz.bar());//1

当你调用方法inovcation'this'绑定到当前对象时,当你调用函数调用模式'this'绑定到全局对象时。以上示例将简单地向您解释所有阅读过的内容。

在您的示例中,两者都是方法调用模式。

答案 2 :(得分:0)

猜猜你是如何考虑这个例子的。

如果您在考虑,person.greet();是方法调用,person.calculateAge(10);是函数调用,那么您的方法调用都是错误的。

我认为,在第二种方法calculateAge中,调用yearsOld的方式是函数调用模式。

对于JS阅读正确的东西更重要。看看this

这是一个函数调用模式:

var sum = add(3, 4);    // sum is 7

由于add方法不是任何对象的一部分,例如我们正在考虑的yearsOld函数。

答案 3 :(得分:0)

好吧!尽管我是javascript新手,但这个问题确实很老。但是我在写这个答案是为了帮助新人们寻找答案。

当您将函数声明为对象的一部分时,关键字的上下文将保留到当前对象的上下文,因此称为 方法调用 < / strong>,但是当您在先前声明的函数中声明另一个函数时,此新函数的 this 关键字将使用全局上下文,因为它是任何非箭头函数的属性。具有全局上下文的此功能将被视为 功能调用

在上面给出的示例中,函数 greet calculateAge 方法调用下,而函数 yearsOld 函数调用下。

有关此链接的参考信息,请查看:https://www.geeksforgeeks.org/arrow-functions-in-javascript/