用两种不同的方法调用方法

时间:2016-04-13 20:37:14

标签: javascript node.js

我是JavaScript和Node.js的新手,我正在学习OOP,并且遇到了两种调用方法的方法。

我的代码:

var Person = function(name) {
    this.fName = name;
};

Person.prototype.sayHello = function(){
    console.log("Hello, I am " + this.fName);
}

var person1 = new Person("mike");
person1.sayHello();

var helloFunction = person1.sayHello;
helloFunction.call(person1);

输出:

Hello, I am mike
Hello, I am mike

两种用途都会产生相同的结果。是否存在一个版本比另一个版本更合适的情况?这两个电话有什么优点/缺点吗?

3 个答案:

答案 0 :(得分:1)

  

是否存在一个版本比另一个版本更合适的情况?

在调用函数时,您几乎排他性地使用 normal func()。使用func.call()并不是在没有特殊原因的情况下使用,特别是使用特定对象作为this值。

任意使用非标准编码模式会产生难以理解,不可维护,容易出错的代码。

答案 1 :(得分:0)

两者都是合法的。这取决于结果的最终结果。当您想要从一个对象重用另一个对象的方法时,使用.call非常有用。

答案 2 :(得分:0)

通常,您会使用person1.sayHello()。它更简洁,更易于阅读。

如果对象具有sayHello.call属性但本身不具有fName方法,那么您希望使用sayHello的位置。例如:

var helloFunction = person1.sayHello;
var pseudoPerson = { fName: "shadow mike" };
helloFunction.call(pseudoPerson); // "Hello, I am shadow mike"