javascript - 使用带和不带 `new` 的构造函数创建对象

标签 javascript object

我注意到我可以使用构造函数以两种不同的方式创建同一个对象。

var myObj = Object()

var myObj = new Object()

我可以使用这些方法为两者添加属性。 myObj.age = 1myObj['age'] = 1。可以通过相同的方式访问两者的属性。

那么我创建 myObj 的这两种方式之间的实际区别是什么?另外,其中一种是创建对象的更好方法吗?

最佳答案

不同之处在于,第一个只是在window 对象的范围内将Object() 作为函数调用。

第二个实际上实例化了一个新对象。这是您要用来创建对象的对象。

Object() 函数的区别可能不明显,但假设您创建了自己的类型,如下所示:

function User(name) {
    this.name = name;
}
var u1 = User("John");
var u2 = new User("Jane");

console.log(u1); // *undefined* because `User()` doesn't return anything.
console.log(this.name); // John
console.log(window.name); // John
console.log(u2.name); // "Jane"

Object 函数本身是一个特例——它确实创建了一个新对象。但是由于大多数函数不是那样工作的,所以在实例化事物时养成使用 new 关键字的习惯是很好的。另一方面,如果您只是创建一个普通的旧 Object,大多数人更喜欢更简洁的语法:

var myObj = {};

关于javascript - 使用带和不带 `new` 的构造函数创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28126603/

相关文章:

javascript - 在 php 中插入一个 jQuery 值

c# - 是否可以将 c# 对象初始值设定项与工厂方法一起使用?

javascript - 尝试使用构造函数处理嵌套对象时出错

python - 在 if 循环中添加到字典

javascript - 按属性名称递归搜索对象中的值

javascript - Vue.js 过滤器中的异步数据

javascript - hasClass jQuery 不工作

C#动态替换对象类中的对象~

javascript - 通过其中一个键将对象数组转换为单个对象

javascript - 在 typescript 中使用任何 Prop 定义对象