Javascript 我应该在原型上还是在新创建的实例上调用构造函数方法?
我创建了一个类Javascript 我应该在原型上还是在新创建的实例上调用构造函数方法?,javascript,Javascript,我创建了一个类var Emp=function(){}
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
如果使用案例1,则默认情况下,此
上下文将指向原型
对象,因此无法使用该对象访问实例
值
例如:
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中,您可以访问原型
对象以及实例
值。这方面的一个示例代码是
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.
如果没有在实例上调用这些方法,它们应该是静态的,即在Emp
中定义,而不是在Emp.prototype
中定义:
function Emp() { /* ... */ }
Emp.function1 = function() { /* ... */ };
或ES6课程:
class Emp {
static function1() { /* ... */ }
}
然后像这样调用函数:
Emp.function1(/* arguments */);
这与jQuery有什么关系?如果不创建实例,为什么要创建函数作为原型的属性?案例1毫无意义。如果函数没有在调用它们的实例上实际操作,那么案例2也是毫无意义的。案例2是我知道的goYup的方法。。但是我不知道确切的原因。。