如果我想創造一個javascript「類」具有兩個屬性防止javascript函數,我可能會做這樣的事情:意外使用全局窗口
var Person = function (firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
};
然後我可以創建新的聯繫人如下:
var p = new Person("John", "Doe");
console.log(p.firstName + " " + p.lastName);
在這一點上,一切都很好。但是,如果有人不小心(或故意)調用以下:
Person("Mary", "Smith"); // without "new"
突然之間,firstName
和lastName
在全局窗口上下文的一部分,並有可能搞砸了整個頁面。
console.log(window.firstName); // logs "Mary"
有沒有設法防止這種情況,建設Person
「下課」時的好辦法?顯然,如果有人想在javascript中打破某些東西,他們可以做到,但我只是在尋找最佳做法。
我可以在類的頂部拋出這樣的事情,但我不知道這是一個很好的答案:
if (this === window) {
console.log("You are fail");
return;
}
您很快就會發現錯誤,只需最少的測試,因爲如果函數調用時沒有'new',它將返回'undefined'而不是期望的對象。比嘗試隱藏錯誤更好地嘗試失敗。 – RobG