用两种不同的方式调用方法
我是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"