什么是對(duì)象醒颖?
對(duì)象(object)是 一種最重要的數(shù)據(jù)類型贰您。它是一組“鍵值對(duì)”(key-value)的集合,是一種無序的復(fù)合數(shù)據(jù)集合卑吭。
比如下面的例子:
var obj = {
foo: 'Hello',
bar: 'World'
};
上面代碼中,大括號(hào)就定義了一個(gè)對(duì)象马绝,它被賦值給變量obj豆赏,所以變量obj就指向一個(gè)對(duì)象。該對(duì)象內(nèi)部由鍵名和鍵值組成,在這個(gè)例子中掷邦,鍵名為foo和bar白胀,相對(duì)應(yīng)的鍵值為Hello和world。需要注意的是抚岗,鍵名默認(rèn)是為字符串的或杠。
全局變量
一種是 ECMAScript 規(guī)定的:
global.parseInt
global.parseFloat
global.Number
global.String
global.Boolean
global.Object
一種是瀏覽器自己加的屬性
window.alert
window.prompt
window.comfirm
window.console.log
window.console.dir
window.document
window.document.createElement
window.document.getElementById
原型鏈
JavaScript 中的對(duì)象的每個(gè)實(shí)例對(duì)象(object )都有一個(gè)私有屬性(稱之為proto)指向它的原型對(duì)象(prototype)。這個(gè)原型對(duì)象也有一個(gè)自己的原型對(duì)象(proto) 宣蔚,層層向上直到一個(gè)對(duì)象的原型對(duì)象為 null
向抢。根據(jù)定義,null
沒有原型件已,并作為這個(gè)原型鏈中的最后一個(gè)環(huán)節(jié)笋额。
關(guān)于原型鏈,需要理解下面三句話:
function People(){}
var p = new People()
p.__proto__ === People.prototype
People.__proto__ === Function.prototype
People.prototype.__proto__ === Object.prototype
**當(dāng) new 一個(gè)函數(shù)的時(shí)候會(huì)創(chuàng)建一個(gè)對(duì)象篷扩,『函數(shù).prototype』 等于 『被創(chuàng)建對(duì)象.proto』
一切函數(shù)都是由 Function 這個(gè)函數(shù)創(chuàng)建的兄猩,所以『Function.prototype === 被創(chuàng)建的函數(shù).proto』
一切函數(shù)的原型對(duì)象都是由 Object 這個(gè)函數(shù)創(chuàng)建的,所以『Object.prototype === 一切函數(shù).prototype.proto』**
知乎上有一個(gè)非常好的實(shí)例可以用來深入理解:
[原型鏈]https://zhuanlan.zhihu.com/p/22473059
如果再高度概括一下鉴未,其實(shí)就是“函數(shù)爸爸(People(){})構(gòu)造了對(duì)象兒子(p)枢冤,那么兒子的.proto自然指向爸爸的.prototype;所有函數(shù)都是Function函數(shù)(姥爺)構(gòu)造的;Function函數(shù)的原型對(duì)象都是Object (太爺爺)這個(gè)函數(shù)構(gòu)造的”铜秆。
var 對(duì)象 = new 函數(shù)()
對(duì)象.proto === 構(gòu)造這個(gè)對(duì)象的函數(shù).prototype