在javascript对象上声明函数的最佳方法

时间:2018-03-09 08:04:49

标签: javascript oop ecmascript-6

当定义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
}

在原型上定义对象函数有什么好处吗? 谢谢!

3 个答案:

答案 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

将函数更改为成员变量时,只更改该实例。如果在原型中更改它,它会影响所有实例。