创建构造函数后使用原型有什么好处?
what is the benefit of using prototype after creating constructor function?
如果你有像
这样的构造函数
var SomeClass = function(){
this.a= "";
this.b= "";
}
然后假设您使用原型添加另一个方法
SomeClass.prototype.fn = function fn(){
console.log(this.a);
};
为什么要使用 prototype
,您只需将此方法添加到您的构造函数中
功能?
var myClass = function(){
this.a = "";
this.b = "";
this.fn = function(){
console.log(this.a);
}
};
因为现在如果您创建 1000 个对象,它们将共享相同的字段并一遍又一遍地重复:{ a: "", b: "", fn: myClass/this.fn() }
。
这很耗费内存,是一种不好的做法。当你将fn
委托给class.prototype
时,代码不再重复,对象为"lighter":{ a: "", b: "" }
,但仍然可以使用fn
方法。
有几个好处:
它创建了一个 fn
函数,被所有用该构造函数创建的对象重用;这比每个对象上的单独函数更节省内存。
让对象对其原型保持动态 link 意味着当您向原型添加方法时,它们可用于 已经存在的对象.
只有一个函数所有相关对象重用意味着您可以 更新 该函数,如果需要在运行时,在只有一个地方,并让所有相关对象使用更新的功能,甚至是已经存在的对象。
在构造函数的 prototype
属性 上可用意味着它可以用于 other 对象,而不是通过构造函数创建;这个经常使用效果不错,比如:
Array.prototype.forEach.call(
document.querySelectorAll("div"),
function(div) {
// ...
}
);
因为当您使用 new 关键字从函数创建对象时
tesObject= new Class();
你每次都在每个对象中重新创建函数。
所以它使用更多的内存和更少的性能。
如果你有像
这样的构造函数var SomeClass = function(){
this.a= "";
this.b= "";
}
然后假设您使用原型添加另一个方法
SomeClass.prototype.fn = function fn(){
console.log(this.a);
};
为什么要使用 prototype
,您只需将此方法添加到您的构造函数中
功能?
var myClass = function(){
this.a = "";
this.b = "";
this.fn = function(){
console.log(this.a);
}
};
因为现在如果您创建 1000 个对象,它们将共享相同的字段并一遍又一遍地重复:{ a: "", b: "", fn: myClass/this.fn() }
。
这很耗费内存,是一种不好的做法。当你将fn
委托给class.prototype
时,代码不再重复,对象为"lighter":{ a: "", b: "" }
,但仍然可以使用fn
方法。
有几个好处:
它创建了一个
fn
函数,被所有用该构造函数创建的对象重用;这比每个对象上的单独函数更节省内存。让对象对其原型保持动态 link 意味着当您向原型添加方法时,它们可用于 已经存在的对象.
只有一个函数所有相关对象重用意味着您可以 更新 该函数,如果需要在运行时,在只有一个地方,并让所有相关对象使用更新的功能,甚至是已经存在的对象。
在构造函数的
prototype
属性 上可用意味着它可以用于 other 对象,而不是通过构造函数创建;这个经常使用效果不错,比如:Array.prototype.forEach.call( document.querySelectorAll("div"), function(div) { // ... } );
因为当您使用 new 关键字从函数创建对象时
tesObject= new Class();
你每次都在每个对象中重新创建函数。
所以它使用更多的内存和更少的性能。