我应该在原型或新创建的实例上调用构造函数方法吗?

时间:2016-04-16 12:46:08

标签: javascript

我创建了一个类var Emp = function() { };,然后在类的原型中将函数定义为

Emp.prototype.function1 = function() { /* some definition */ };
Emp.prototype.function2 = function() { /* some definition */ };
// .. so on

对绩效有什么影响,哪种方法有效?为什么?

案例1:如果我调用函数

Emp.prototype.function1(); 

案例2:如果我首先创建Emp实例

var empobj = new Emp();
empobj.function1(); // function calling  

2 个答案:

答案 0 :(得分:1)

如果您使用案例1,则默认情况下this上下文将指向prototype对象,因此使用该值无法访问instance值。

例如:

var x = function(){ this.a = 10 };
x.prototype.y = function(){ console.log(this.a) };
x.prototype.y(); // This will print undefined since 
 //there is no properties other than y in the prototype of x.

在案例2的同时,您可以访问prototype对象以及instances值。该示例代码为

var x = function(){ this.a = 10 };
x.prototype.y = function(){ console.log(this.a) };
var obj = new x();
obj.y(); // `y` can be accessed also. And it will output 10.

答案 1 :(得分:1)

如果没有在实例上调用方法,它们应该是静态的,即在Emp而不是在Emp.prototype中定义:

function Emp() { /* ... */ }
Emp.function1 = function() { /* ... */ };

或者使用ES6课程:

class Emp {
  static function1() { /* ... */ }
}

然后调用这个函数:

Emp.function1(/* arguments */);