我是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
两种用途都会产生相同的结果。是否存在一个版本比另一个版本更合适的情况?这两个电话有什么优点/缺点吗?
答案 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"