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