參與iT邦JavaScript中忍比賽,獲得一本JS武林祕級“JavaScript設計模式”,因而閉門修練月餘,今神功既成故節錄三十片段,以饗邦友。
先前提過,建構式只是使用new呼叫而已,但本質上還是函式。但若萬一你忘了加上new,那會發生什麼事?
其實就算忘了加"new",也不會造成語法或執行期錯誤,但會導致邏輯錯誤與非預期行為。因為當你忘了new,建構式中的this會指向全域物件,例如在瀏覽器環境中指向window。
來看個範例比較清楚。
function Waffle () {
this.tastes = "yummy";
};
var good_morning = new Waffle(); // 有加 new
console.log(typeof good_morning); // "object"
console.log(good_morning.tastes); // "yummy"
function Waffle () {
this.tastes = "yummy";
};
var good_morning = Waffle(); // 忘了加 new
console.log(typeof good_morning); // "undefined"
console.log(window.tastes); // "yummy"
console.log(good_morning.tastes); // error
JS基本功粉重要,此節為七小段之第四段,咱先進廣告,明天回來...
(待)
太深奧了.....
這必需要累積百千萬劫福德,加上供養千百億那由他諸佛而無空過者才能稍有體會...
ted99tw提到:
加上供養千百億
不用那麼多,我只要一成,我就教你.....
是辛巴威幣計價嗎?....
<pre class="c" name="code">
function Waffle () {
this.tastes = "yummy";
};
var good_morning = new Waffle(); // good_morning 是 Waffle 的 instance
console.log(typeof good_morning); // "object"
console.log(good_morning.tastes); // "yummy"
function Waffle () {
this.tastes = "yummy";
};
var good_morning = Waffle(); // good_morning 接 Waffle 函式回傳值
console.log(typeof good_morning); // Waffle 未有回傳值 所以good_morning 未定義
console.log(window.tastes); // 已經執行Waffle函式,this 為上一層 object即windows
console.log(good_morning.tastes); // 未定義值 沒有屬性
多謝補充,真是太讚了!