gpt4 book ai didi

需要 JavaScript 原型(prototype)解释

转载 作者:可可西里 更新时间:2023-11-01 02:50:24 24 4
gpt4 key购买 nike

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

var objectName = {

//global variables
a : 'somevalue',

func1: function(){

},


func2: function(){

}

}

如果我必须将其转换为原型(prototype)格式,我该怎么做?

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

为什么人们对原型(prototype)谈论那么多。

最佳答案

变成原型(prototype)看起来像这样:

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

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

var myObject = new someObject();

有哪些优势?好吧,有很多,但是有制作原型(prototype)时有几个非常实际的原因比对象文字更有意义。

首先是减少重复代码;所以,假设你想要与 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
}

或者,我可以使用原型(prototype),这样我就可以在构建对象期间为 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。随着字面量数量的增加,管理所有字面值的时间会更长,难度也更大。

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

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,所以有很多有趣的东西您可以处理对象字面量无法处理的关系。

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

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

关于需要 JavaScript 原型(prototype)解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7160310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com