繁体   English   中英

需要JavaScript原型说明

[英]JavaScript Prototype explanation needed

我通常在项目中以这种方式创建类...对象文字。

var objectName = {

     //global variables
      a : 'somevalue',

      func1: function(){

      },


      func2: function(){

      }

}

如果必须将其转换为原型格式,该怎么办?

当使用这种格式完成工作时,使用原型比使用原型有什么优势?

人们为什么对原型这么讲。

变成原型看起来像:

var someObject = function() {
    this.a = "somevalue";
};

someObject.prototype.func1 = function() { // work };
someObject.prototype.func2 = function() { // work };

var myObject = new someObject();

有哪些优势? 好了,有很多,但是当原型比对象字面量更具意义时,有一些实际的实际原因。

首先是减少重复代码; 因此,可以说你想另一个对象非常smiliar到objectName ,但是你想a是一个不同的值。 您可能最终会得到以下结果:

var objectName = {
      a : 'somevalue',
      func1: function(){ },
      func2: function(){ }
}

var otherObjectName = {
      a : 'otherValue',
      func1: function(){ },
      func2: function(){ }
}

你可以通过说减少重复的功能

var objectName = {
      a : 'somevalue',
      func1: function(){ },
      func2: function(){ }
}

var otherObjectName = {
      a : 'otherValue',
      func1: objectName.func1,
      func2: objectName.func2
}

或者,使用的原型,我可以做,所以我可以在我想要的值传递a在对象的构造过程。 重构后的代码如下所示:

var someObject = function(a) {
    this.a = a;
};

someObject.prototype.func1 = function() { /* work */ };
someObject.prototype.func2 = function() { /* work */ };

var myObject = new someObject("somevalue");
var myOtherObject = new someObject("otherValue");

现在,如果我想为它们两个添加新功能。 使用对象字面量方法,则必须记住还要将其添加到otherObjectName。 随着文字数量的增加,管理所有这些文字将花费更长的时间和更多的难度。

使用原型方法,我们只需要说:

someObject.prototype.func3 = function() { // do even more work }

甚至更有趣的是,我可以通过只说一个引用来动态扩展两个对象。

// find what function made me, get its prototype, and add a new function to it
myObject.constructor.prototype.func3 = function() { /* work */ }
myOtherObject.func3() // tada magic!

或者我可以仅通过了解引用来制作新对象。 喜欢:

var newObject = myObject.constructor(myObject.a + " new");

因为myObjectmyOtherObject共享相同的constructorprototype ,所以使用该关系可以执行很多有趣的事情,而对于对象常量则无法做到。

您可以将原型想像成创建对象的小工厂,而不必自己像文字一样创建每个对象。

现在,如果您在想,“好吧,我只会使用其中之一,而不会使用任何疯狂的方法来扩展魔术。” 然后,定义对象文字是解决某些问题的完全有效的方法。 有时使用原型会更好。 使用对您要解决的问题有意义的模式,而不是尝试使问题适合模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM