我注意到我可以使用构造函数以两种不同的方式创建同一个对象。
var myObj = Object()
var myObj = new Object()
我可以使用这些方法为两者添加属性。 myObj.age = 1
和 myObj['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/