非new调用Person时,防止this绑定到全局变量window上,引起数据覆盖和污染。
function Person(name, age, addrsss) {
if (this instanceof Person) {
this.name = name;
this.age = age;
this.address = address;
} else {
return new Person(name, age, address);
}
}
注意:安全作用域函数在使用窃取模式实现继承时,会导致错误(但是继承你不用原型指向???),请看下面代码:
function Person(name) {
if (this instanceof Person) {
this.name = name;
} else {
return new Person(name);
}
}
function Spring(name, age) {
Person.call(this, name);
this.age = age;
}
Spring对象并未获取name属性,因为Person是作用域安全的构造函数,修正这个问题可以在最后加上一句原型指向:
Spring.prototype = new Person();