1. 程式人生 > >JS乾貨--物件字面量

JS乾貨--物件字面量

Why?

  一把在JS中宣告物件,大家多會這麼寫var a = {};
  很少有人這麼寫:var a = new Object();
  這是為什麼呢?
  1、首先{}這叫做物件字面量,new Object()則是使用構造器函式。
  2、明顯的物件字面量的宣告方式比構造器函式更加方便。
  3new關鍵字缺失造成的問題。

  所以在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;