Joh*_*per 9 javascript prototype-programming
我通常在我的项目中以这种方式创建我的类...对象文字.
var objectName = {
//global variables
a : 'somevalue',
func1: function(){
},
func2: function(){
}
}
Run Code Online (Sandbox Code Playgroud)
如果我必须将其转换为原型格式,我该怎么做?
当使用这种格式完成工作时,使用原型比使用原型更有利.
为什么人们在原型上讲得那么多.
J. *_*mes 32
变成原型会看起来像:
var someObject = function() {
this.a = "somevalue";
};
someObject.prototype.func1 = function() { // work };
someObject.prototype.func2 = function() { // work };
var myObject = new someObject();
Run Code Online (Sandbox Code Playgroud)
有什么好处?好吧,有一堆,但是当原型比对象文字更有意义时,有一些非常实际的原因.
首先是减少重复的代码; 所以,让我们说你想要一个非常熟悉的另一个对象objectName,但你想a成为一个不同的价值.你可能会得到类似的东西:
var objectName = {
a : 'somevalue',
func1: function(){ },
func2: function(){ }
}
var otherObjectName = {
a : 'otherValue',
func1: function(){ },
func2: function(){ }
}
Run Code Online (Sandbox Code Playgroud)
你可以通过说减少重复的功能
var objectName = {
a : 'somevalue',
func1: function(){ },
func2: function(){ }
}
var otherObjectName = {
a : 'otherValue',
func1: objectName.func1,
func2: objectName.func2
}
Run Code Online (Sandbox Code Playgroud)
或者,使用原型,我可以做到这一点,以便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");
Run Code Online (Sandbox Code Playgroud)
现在,如果我想为它们添加一个新功能.使用对象文字apporach,然后你必须记住也将它添加到otherObjectName.随着文字数量的增加,管理它们的时间会更长,也更难.
使用原型方法,我们不得不说的是:
someObject.prototype.func3 = function() { // do even more work }
Run Code Online (Sandbox Code Playgroud)
或者更有趣的是,我可以动态扩展两个对象,只需通过说一个引用.
// 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!
Run Code Online (Sandbox Code Playgroud)
或者我只能通过参考来制作一个新物体.喜欢:
var newObject = myObject.constructor(myObject.a + " new");
Run Code Online (Sandbox Code Playgroud)
因为无论myObject和myOtherObject共享相同的constructor和prototype,也有很多有趣的事情,你可以用这种关系,你不能使用对象文本做做.
您可以将原型视为创建对象的小工厂,而不必将自己创建为文字.
现在,如果你在想,"好吧,我只会有其中一个,而且我不会做任何你疯狂的方法扩展魔法." 然后定义一个对象文字对于某些问题是完全有效的应用程序.有时使用原型更好.使用对您要解决的问题有意义的模式,而不是尝试将您的问题纳入模式.
| 归档时间: |
|
| 查看次数: |
5607 次 |
| 最近记录: |