經過對象字面量和構造函數建立對象的區別:

經過對象字面量方式建立對象:

咱們能夠直接在建立對象的時候添加功能javascript

var person = {
    name : 'zqq',
    age : 28,
    say : function(){
        return "hello";
    }
};

或者html

首先定義一個"空對象",而後添加屬性和方法java

var person = {};
person.name = 'zqq';
person.age = 28;
person.say = function(){
    return "hello";
}

上面的"空對象"爲何打了雙引號?這只是一種簡稱而已。在js中根本不存在真正的空對象,理解這一點相當重要!即便時最簡單的{}對象也會包含從Object.prototype繼承而來的屬性和方法。咱們提到的"空對象"只是說這個對象沒有自有屬性,不考慮它是否有繼承而來的屬性git

經過構造函數建立對象

var person =  new Object();//沒傳參數的話,()能夠省略
person.name = 'zqq';
person.age = 28;

對象字面量vs構造函數建立對象對比

字面量的優點:github

  1. 它的代碼量更少,更易讀;
  2. 它能夠強調對象就是一個簡單的可變的散列表,而沒必要必定派生自某個類;
  3. 對象字面量運行速度更快,由於它們能夠在解析的時候被優化:它們不須要"做用域解析(scope resolution)";由於存在咱們建立了一個同名的構造函數Object()的可能,當咱們調用Object()的時候,解析器須要順着做用域鏈從當前做用域開始查找,若是在當前做用域找到了名爲Object()的函數就執行,若是沒找到,就繼續順着做用域鏈往上照,直到找到全局Object()構造函數爲止
  4. Object()構造函數能夠接收參數,經過這個參數能夠把對象實例的建立過程委託給另外一個內置構造函數,並返回另一個對象實例,而這每每不是你想要的。

下面的示例代碼中展現了給new Object()傳入不一樣的參數(數字、字符串和布爾值),最終獲得的對象是由不一樣的構造函數生成的:markdown

// 空對象
var o = new Object();
console.log(o.constructor === Object); // true

// 數值對象
var o = new Object(1);
console.log(o.constructor === Number); // true
console.log(o.toFixed(2)); // "1.00"

// 字符串對象
var o = new Object("I am a string");
console.log(o.constructor === String); // true
// 普通對象沒有substring()方法,但字符串對象有
console.log(typeof o.substring); // "function"

// 布爾值對象
var o = new Object(true);
console.log(o.constructor === Boolean); // true

Object()構造函數的這種特性會致使一些意想不到的結果,特別是當參數不肯定的時候函數

綜上所述:儘可能用對象字面量的方式來建立對象優化

參考資料:
https://github.com/TooBug/jav...
http://lichking1201.github.io....net

相關文章
相關標籤/搜索