需要 JavaScript 原型解释

2023-11-26

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

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();

有哪些优点?嗯,有很多,但是有 原型制作时有一些非常实际的原因 比对象字面量更有意义。

首先是减少重复代码;所以,假设你想要 另一个非常相似的物体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");

因为两者myObject and myOtherObject分享相同的constructor and prototype,有很多有趣的事情 您可以利用这种关系来实现对象文字无法实现的功能。

您可以将原型视为创建对象的小工厂 而不必自己将每个对象创建为文字。

现在,如果你在想,“好吧,我只会有一个 这些,我不会做任何你疯狂的方法 扩展魔法。”然后定义一个对象文字是一个完全有效的方法 对于一些问题。有时使用原型会更好。使用 对您要解决的问题有意义的模式, 而不是试图将你的问题纳入某种模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要 JavaScript 原型解释 的相关文章