看起來,React組件中的prop很像是HTML元素的屬性,不過HTML組件屬性的值都死字符串類型 ,即使是內(nèi)嵌JavaScript,他也必須是字符串形式。而React組件中的prop所能支持的類型則豐富的多,但是當(dāng)prop的值的數(shù)據(jù)類ing不是字符串的時候,那么在JSX中必須用{}將prop值給包括起來。所以對于某些prop來說,很可能他的值是一種很怪異的形式出現(xiàn),比如說對于style這個prop,他的值很可能是這樣的:{{'width': '100px'}}。哈
通過前面的學(xué)習(xí),我們可以總結(jié)一下對象屬性查找的機(jī)制:如果在第一個對象上沒有找到需要的屬性或者方法引用,引擎就會繼續(xù)在該對象的[[Prototype]]關(guān)聯(lián)的那個對象上進(jìn)行查找。同理,如果在后者中也還是沒有找到需要的屬性的話,那么將會繼續(xù)在它的[[Prototype]]所關(guān)聯(lián)的對象進(jìn)行查找,知道找到Object.prototype為止。我們稱這一系列對象的鏈接為“原型鏈”。
對象委托是一種極其強(qiáng)大的設(shè)計模式,它可以讓我們極其自由將某個對象關(guān)聯(lián)到其他對象上,從而避免了必須先要構(gòu)造函數(shù)的麻煩。并且對象委托的自由度太高了,畢竟你的原型鏈?zhǔn)悄阕约合M卸嚅L就可以有多長,但是必須聲明的是越長的原型鏈對于程序的維護(hù)是越困難的。下面舉一個例子:
var supercla = {
'setId': function(id){this.id = id},
'getId': function(){console.log(this.id)}
}
var child = Object.create(supercla)
child.set = function(id, label){
this.setId(id)
this.label = label
}
child.get = function(){
this.getId()
console.log(this.label)
}
var obj1 = Object.create(child)
var obj2 = Object.create(child)
obj1.set(12, 'a')
obj2.set(15, 'b')
obj1.get()//12 'a'
obj2.get()//15 'b'
需要注意的地方:對于obj1和obj2對象來說,id和label屬性肯定是定義在自身上面的,關(guān)于這點,分析一下即可。