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

我是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 

两种用法都产生相同的结果。 有一个版本比另一个版本更合适吗? 这两个电话有什么优点/缺点?

有一个版本比另一个版本更合适吗?

在调用一个函数时,你几乎可以独占使用正常的 func() 。 使用func.call()并不意味着没有特别的理由,特别是使用特定的对象作为this值。

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

两者都是合法的。 这取决于结果是什么结局。 当你想从另一个对象上重用一个方法时,使用.call是很有用的。

一般来说,你会使用person1.sayHello() 。 它更简洁,更易于阅读。

你想使用sayHello.call是如果对象具有fName属性,但是本身没有sayHello方法。 例如:

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