JS乾貨--物件字面量
阿新 • • 發佈:2019-02-09
Why?
一把在JS中宣告物件,大家多會這麼寫var a = {};
很少有人這麼寫:var a = new Object();
這是為什麼呢?
1、首先{}這叫做物件字面量,new Object()則是使用構造器函式。
2、明顯的物件字面量的宣告方式比構造器函式更加方便。
3、new關鍵字缺失造成的問題。
所以在JS中建議以物件字面量的宣告方式優先。下面我們先說說構造器函式
構造器函式
----------------
constructor
----------------
舉個栗子:
var Student = function () {
this.name = 'default';
this.say = function() {
console.log('say hello!');
}
}
這裡的say方法放在建構函式的內部是不妥的。對於可以重用的成員,建議放在原型鏈上,主要是因為它一直儲存在記憶體中。
所以可以改為:
Student.prototype.say = function() {
console.log('say hello!');
}
如果我們建立例項的時候,丟失new呢?
var s1 = Student();
console.log(window.name); //"default"
缺少new關鍵字之後,對於Student內部的this便指向了全域性物件。這是很糟糕的一件事。
這也是為什麼規定建構函式的首字元大寫的原因。
去new
---------------
去掉new關鍵字
---------------
function People() {
if(!(this instanceof People)) {
return new People();
}
this.name = "default";
}
我們還可以通過arguments.callee完成同樣的效果,不過在ES5的"use strict" 模式下被禁用了。
其他的字面量
陣列字面量
var arr = [1,2,3];
正則表示式字面量
var reg = /[a-z]/g;