JS中定义函数/方法之间的区别?

时间:2015-08-31 11:20:19

标签: javascript function oop methods

以下是3种方法来解决使用构造函数构造的对象的键值对。在每个可描述的方面,这三种方式有什么不同? (我甚至想询问函数和方法在功能,用法等方面的基本差异)。

function Person(name,age) {
  this.name = name;
  this.age = age;
}
var bob = new Person("Bob Smith", 30);
var me = new Person('Madhav Devkota', 55);

//===================================================
//A. Simple function
printPerson= function (p) { 
  console.log(p.name);
};
printPerson(bob);  printPerson(me);
//===================================================

//B. Method I
printPerson = function(){
  console.log(this.name) ;  
};
bob.printPerson = printPerson; me.printPerson = printPerson;
bob.printPerson(); me.printPerson();
//=================================================

//C. Method II
this.printPerson = function() {
    console.log(this.name);
};
bob.printPerson();      me.printPerson();

1 个答案:

答案 0 :(得分:1)

我还要添加

// 0.无功能

console.log(bob.name);
console.log(me.name);

这是最基本的方式。您正在直接对对象属性执行某些操作。

一个。简单的功能

您为代码命名以改善语义。现在,您将描述代码的用途。 您可以访问更多属性并组合以创建复杂结果,而无需重复代码。

printPerson = function (p) { 
  console.log(p.name + ' is aged ' + p.age)
}

而不是无功能

console.log(bob.name + ' is aged ' + bob.age);
console.log(me.name ' is aged ' + me.age);

B中。方法I

现在你的函数也是你对象的属性。与在声明它的范围内工作的简单函数不同,它的方法附加到您的对象上,您可以将它与它一起传递。当调用'this'时,引用从中调用方法的对象。

你也可以这样做'废话'方法:

printPerson = function(p){
  console.log(p.name) ;  
};
bob.printPerson = printPerson; me.printPerson = printPerson;
bob.printPerson(bob); me.printPerson(me);

℃。方法二

这个不太对劲。在给定的上下文中没有意义,因为'this'是在那个时刻引用 Window 对象。在那时你实际上再次调用'方法I'方法。 正确的使用方法是在构造函数中:

function Person(name,age) {
  this.name = name;
  this.age = age;
  this.printPerson = function() {
    console.log(this.name);
  };
}

现在,您的对象一旦创建就会有。 printPerson ()方法。

如果您愿意,我可以详细说明,但重要的是要注意函数与方法的差异在这个代码复杂度级别上并不太相关。当您的代码变得更复杂时,代码组织变得非常重要对于“下一级”,您应该更熟悉Javascript 范围和对象继承