function ClassA() {
this.weight = 100;
this.age = 0;
}
var classA = ClassA();
console.log(classA); // undefined
console.log(window.weight); // 100
console.log(window.age); // 0
在初始化變量時,如果我們忘記使用 new 關鍵字,構造函數內的屬性將會污染到全局對象上,如果屬性名與已有方法名重名時,更會出現難以查找的 bug,現在我們來修改構造函數避免此問題:
function ClassA() {
if (this instanceof ClassA) {
this.weight = 100;
this.age = 0;
}else{
return new ClassA;
}
}
var classA = ClassA();
console.log(classA); // ClassA {weight: 100, age: 0}
console.log(window.weight); // undefined
console.log(window.age); // undefined