gpt4 book ai didi

Javascript 构造函数创建对象与常规对象

转载 作者:行者123 更新时间:2023-12-02 16:31:22 24 4
gpt4 key购买 nike

很抱歉标题可能会产生误导,但我想知道为什么要采用这种创建对象并添加属性和方法的方法:

//A)
var myObjCreatedByFunction = function() {
this.prop1 = "a";
this.func1 = function() {
alert("a");
}
};

然后使用原型(prototype)创建其他方法

myObjCreatedByFunction.prototype.func2 = function() { ... }

优于简单明了的创建对象:

//B)
var myObj = {
prop1: "a",
func1: function() {
alert("a");
}
};

只需添加新方法即可

myObj.func2 = function() { ... }

据我所知,一些熟练的开发人员使用第一种方法并使用原型(prototype),即使他们以后不再创建新实例。

此外,使用 IIFE 是否优于这两个示例?如果是,为什么? (我最近看到很多这种用法)

var myObjIIFE = (function() {
return {
prop1: "a",
func1: function() {
alert("a");
}
}
})());

有人可以解释一下我什么时候应该使用第一种方法、第二种方法和第三种方法吗?为什么?谢谢!

最佳答案

B 仅对单个实例有用。它没有提供像 A 那样使用这些方法和属性创建该类型的多个实例的方法。如果您想要/需要的只是一个实例,那么 B 就很好,而且可能更容易表达和遵循。

关于是否使用方法原型(prototype)或在构造函数中分配它们有很长的讨论(参见 prior reference 并且还有很多很多其他这样的讨论)。使用原型(prototype),然后使用 new 运算符创建新对象将节省内存(因为所有方法都由所有实例共享)。在构造函数中分配它们允许访问私有(private)实例变量(构造函数中的局部变量),并且在执行给定方法时具有稍微更好的性能。

IIFE 是一些人选择采用的模式。它对您正在做的事情没有任何好处,但确实提供了存储“私有(private)类变量”的范围,这些变量由所有实例共享,但外部世界无法访问。从你展示的方式来看,它不是我最喜欢的,因为没有关于对象的类型信息。它只是一个具有属性的普通对象。在某些情况下(特别是在调试中,但有时在编码中),了解您拥有的对象类型可能很有用。

关于Javascript 构造函数创建对象与常规对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28267254/

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