需要JavaScript原型解释
我通常在我的项目中以这种方式创建我的类。。。对象文字需要JavaScript原型解释,javascript,prototype-programming,Javascript,Prototype Programming,我通常在我的项目中以这种方式创建我的类。。。对象文字 var objectName = { //global variables a : 'somevalue', func1: function(){ }, func2: function(){ } } 如果我必须将其转换为原型格式,我将如何做 当使用这种格式完成工作时,使用prototype还有什么比这更大的优势呢 为什么人们会对原型说这么多。变成原型看起来像
var objectName = {
//global variables
a : 'somevalue',
func1: function(){
},
func2: function(){
}
}
如果我必须将其转换为原型格式,我将如何做
当使用这种格式完成工作时,使用prototype还有什么比这更大的优势呢
为什么人们会对原型说这么多。变成原型看起来像:
var someObject = function() {
this.a = "somevalue";
};
someObject.prototype.func1 = function() { // work };
someObject.prototype.func2 = function() { // work };
var myObject = new someObject();
var objectName = {
a : 'somevalue',
func1: function(){ },
func2: function(){ }
}
var otherObjectName = {
a : 'otherValue',
func1: function(){ },
func2: function(){ }
}
有什么好处?嗯,有很多,但是有
原型制作时有几个真正实用的理由吗
比对象文字更有意义
首先是减少重复代码;那么,假设你想要
另一个对象非常类似于objectName
,但您希望a
这是一个不同的价值观。您可能会得到以下结果:
var someObject = function() {
this.a = "somevalue";
};
someObject.prototype.func1 = function() { // work };
someObject.prototype.func2 = function() { // work };
var myObject = new someObject();
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");
现在,如果我想给它们都添加一个新函数。使用object-literal-apporach,则必须记住还要将其添加到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
和myOtherObject
共享相同的构造函数
和原型
,所以有很多有趣的事情
您可以处理对象文字无法处理的关系
您可以将原型视为创建对象的小工厂
而不是必须自己创建每个对象作为文本
现在,如果你在想,“好吧,我只想要一个。”
我不会用你那种疯狂的方法
然后定义一个对象文字是一个非常有效的方法
对于一些问题。有时使用原型更好。使用
对您试图解决的问题有意义的模式,
因此,在构造函数中定义函数与在原型中定义函数之间的区别或优势是:constructor.prototype.func=function(){};您不需要在“var newObject=myObject.constructor(myObject.a+“new”);”行中使用“new”?这仍然会触发实例化新对象的类似工厂的操作?