当使用 JavaScript 构造函数创建对象时,可以选择是否使用 new
关键字。如果使用了 new
关键字,则会创建一个新的对象并将其绑定到 this
上,最后返回这个新的对象。如果没有使用 new
关键字,则 this
被绑定到全局对象上,这可能导致一些意外的问题。
下面给出两个示例展示使用和不使用 new
关键字的区别。
示例一
function Person(name) {
this.name = name;
}
var person1 = new Person('John');
console.log(person1.name); // 输出 "John"
var person2 = Person('Jane');
console.log(person2); // 输出 "undefined"
console.log(name); // 输出 "Jane"
上述代码定义了一个 Person
构造函数,它接受一个名为 name
的参数,并将其储存在对象的 name
属性中。
在第一个调用中,我们使用了 new
关键字创建了一个新的 Person
对象,并将其储存在变量 person1
中,因此 person1.name
返回了正确的值。
在第二个调用中,我们没有使用 new
关键字创建对象,而是直接调用了 Person
函数,此时 this
绑定到了全局对象上,因此 person2
是 undefined
,并且 name
变量被设置为了 'Jane'
。
示例二
function Dog(name) {
if (this instanceof Dog) {
this.name = name;
} else {
throw new Error('必须使用 new 关键字创建对象');
}
}
var dog1 = new Dog('旺财');
console.log(dog1.name); // 输出 "旺财"
var dog2 = Dog('小黄');
上述代码定义了一个 Dog
构造函数,如果它被调用时 this
绑定到 Dog
,则会将 name
储存在对象的属性中,否则将抛出一个错误提示必须使用 new
关键字创建对象。
在第一个调用中,我们使用了 new
关键字创建了一个新的 Dog
对象,并将其储存在变量 dog1
中,因此 dog1.name
返回了正确的值。
在第二个调用中,我们没有使用 new
关键字创建对象,因此会抛出一个错误提示必须使用 new
关键字创建对象。
综上所述,使用 new
关键字创建对象可以避免很多意外的问题。因此,建议使用 new
关键字来创建对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js构造函数创建对象是否加new问题 - Python技术站