摘要:通過對象字面量方式創建對象我們可以直接在創建對象的時候添加功能或者首先定義一個空對象,然后添加屬性和方法上面的空對象為什么打了雙引號這只是一種簡稱而已。
通過對象字面量方式創建對象:
我們可以直接在創建對象的時候添加功能
var person = { name : "zqq", age : 28, say : function(){ return "hello"; } };
或者
首先定義一個"空對象",然后添加屬性和方法
var person = {}; person.name = "zqq"; person.age = 28; person.say = function(){ return "hello"; }
上面的"空對象"為什么打了雙引號?這只是一種簡稱而已。在js中根本不存在真正的空對象,理解這一點至關重要!即使時最簡單的{}對象也會包含從Object.prototype繼承而來的屬性和方法。我們提到的"空對象"只是說這個對象沒有自有屬性,不考慮它是否有繼承而來的屬性
通過構造函數創建對象var person = new Object();//沒傳參數的話,()可以省略 person.name = "zqq"; person.age = 28;對象字面量vs構造函數創建對象對比
字面量的優勢:
它的代碼量更少,更易讀;
它可以強調對象就是一個簡單的可變的散列表,而不必一定派生自某個類;
對象字面量運行速度更快,因為它們可以在解析的時候被優化:它們不需要"作用域解析(scope resolution)";因為存在我們創建了一個同名的構造函數Object()的可能,當我們調用Object()的時候,解析器需要順著作用域鏈從當前作用域開始查找,如果在當前作用域找到了名為Object()的函數就執行,如果沒找到,就繼續順著作用域鏈往上照,直到找到全局Object()構造函數為止
Object()構造函數可以接收參數,通過這個參數可以把對象實例的創建過程委托給另一個內置構造函數,并返回另外一個對象實例,而這往往不是你想要的。
下面的示例代碼中展示了給new Object()傳入不同的參數(數字、字符串和布爾值),最終得到的對象是由不同的構造函數生成的:
// 空對象 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...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81712.html
摘要:如下兩段代碼,分別是使用對象字面量和構造函數創建對象。最后,總結下來就是函數對象是繼承自對象的原型,有了函數對象,我們可以給函數的原型添加屬性,這些屬性保存在函數對象中,但是又不會影響其他對象。 看了這篇文章,可以幫助你理解如下內容: 1、向原型鏈上添加屬性為什么用prototype,而一般不用__proto__ 2、javascript為什么要設置一個函數對象,他的作用是什么 3、更...
摘要:對象字面量定義一個空對象這里的空指的是其自身屬性為空,對象繼承了的屬性和方法添加屬性方法完全刪除屬性方法自定義構造函數用操作符調用構造函數時,函數內部會發發生以下情況創建一個新對象,并且引用了該對象并繼承了該函數的原型屬性和方法被加入到的引 對象字面量 //定義一個空對象,這里的空指的是其自身屬性為空,dog對象繼承了Object.prototype的屬性和方法 var dog={} ...
摘要:前言重新梳理一下發現以前說的有問題順便比較兩兩寫法之間的差異性使用對象字面量表示法函數字面量運行時間嵌套函數字面量調用方法函數字面量運行時間函數字面量運行時間使用操作符后跟構造函數詳情可參考關于中的運算符構造函數與原型鏈一些理解構造函數原型 前言 PS:2018/04/14: 重新梳理一下發現以前說的有問題,順便比較兩兩寫法之間的差異性. 1、使用對象字面量表示法 console.ti...
摘要:三種使用構造函數創建對象的方法和的作用都是在某個特殊對象的作用域中調用函數。這種方式還支持向構造函數傳遞參數。叫法上把函數叫做構造函數,其他無區別適用情境可以在特殊的情況下用來為對象創建構造函數。 一、工廠模式 工廠模式:使用字面量和object構造函數會有很多重復代碼,在此基礎上改進showImg(https://segmentfault.com/img/bVbmKxb?w=456&...
摘要:支持的類型的內置數據類型羅列如下自定義自定義這三種類型的賦值是同類似的。這根不同,這因為是沒有包裝類新增的基本類型,只支持函數式賦值,不支持字面量和函數構造。 JavaScript支持的類型 JS的內置數據類型羅列如下: undefined null bool number string function object Function Date ...
閱讀 2947·2023-04-25 22:16
閱讀 2093·2021-10-11 11:11
閱讀 3248·2019-08-29 13:26
閱讀 593·2019-08-29 12:32
閱讀 3410·2019-08-26 11:49
閱讀 2988·2019-08-26 10:30
閱讀 1939·2019-08-23 17:59
閱讀 1507·2019-08-23 17:57