当定义javascript对象,其行为类似于具有操作该状态的状态和函数的类时,最好在定义对象时定义函数,如下所示:
function MyNewClass(){
//State
this.value = ""
this.otherValue = ""
//Functions
this.someFunction = function(){
//Some logic here
}
}
或者更好的做法是在对象的原型上定义函数,例如:
function MyNewClass (){
//state
this.value = ""
this.otherValue = ""
}
MyNewClass.prototype.someFunction = function(){
//Some logic here
}
在原型上定义对象函数有什么好处吗? 谢谢!
答案 0 :(得分:1)
因为函数是对象,根据所描述的场景,我们有两种行为:
如果在“class”函数中声明函数,则每个对象都是你 然后创建它将拥有该函数(对象)的副本,所以 内存使用量会增加。
但是,如果将函数添加到原型中,函数将会 由所有对象共享,因此会有内存保存
答案 1 :(得分:0)
对象的函数应该使用prototype来声明,因为prototype是一个公共空间,由同一个构造函数创建的所有对象共享,它也节省了内存,因为所有对象都没有创建自己的函数,但它们都是指着一个共同的地方。 你可以在这里参考 https://www.youtube.com/watch?v=fBpPfPjxOhc&list=PLqq-6Pq4lTTaflXUL0v3TSm86nodn0c_u 示例
enter code here
//构造函数
function gh(){
this.x=1;
}
//now if you create a object
var p=new gh();
//now i need function show in my object p
function show(){
console.log(x);
}
gh.prototype.show=show();
//将自动添加所有对象(以了解此研究范围链)
答案 2 :(得分:0)
您可以通过运行此代码来了解自己的不同之处:
var output = function(s) { document.getElementById("output").innerText += s; }
function MyNewClass() {
this.foo = function() {
output("1");
}
}
MyNewClass.prototype.bar = function(){
output("2");
};
var a = new MyNewClass();
a.foo();
a.bar();
a.foo = function() { output("3") };
MyNewClass.prototype.bar = function() { output("4"); };
a.foo();
a.bar();
var b = new MyNewClass();
b.foo();
b.bar();
输出为:123414
将函数更改为成员变量时,只更改该实例。如果在原型中更改它,它会影响所有实例。