Object

_.isEqual()

1 .判斷兩個(gè)值是否相等
2 .深度進(jìn)行判斷

_.isMatch()

1 .深度搜索是否有某個(gè)值

_.isOlainObject(value)

1 .檢查value是否是普通對象裙士,也就是該對象由Object 構(gòu)造函數(shù)創(chuàng)建害淤,或者[[Prototype]]為空
2 .

_.toPlainObject()

1 .轉(zhuǎn)換為普通對象,甚至對象繼承的可枚舉屬性也一并繼承
2 .

assign()

1 .對象合并跌榔,但是原生的方法是只會進(jìn)行淺復(fù)制凳怨,如果源對象的某個(gè)屬性的值是對象瑰艘,那么目標(biāo)拷貝的是這個(gè)對象的引用。
2 .只拷貝源對象自身的屬性猿棉,不拷貝繼承屬性磅叛,也不拷貝不可枚舉的屬性

let b1={
    'name':123
}

let o1={
    'name':b1
}

let o2={
    'age':20
}
cc(o1)
b1.name='asdfasd'
cc(Object.assign(o1,o2))

1 .可以發(fā)現(xiàn),當(dāng)修改b1的時(shí)候萨赁,后面合并的的數(shù)組還是會發(fā)生變化,那這樣就很麻煩了兆龙。要不就是保證后面的數(shù)組在合并之后被凍結(jié)杖爽,不然永遠(yuǎn)不能保證這個(gè)數(shù)據(jù)是固定的
2 .自己寫一個(gè)合并的函數(shù),是深度遍歷合并的
3 .在合并之前紫皇,合并的是克隆之后的函數(shù)慰安,這樣原來怎么改都不會影響到現(xiàn)在的數(shù)組了。

let b1={
    'name':123
}

let o1={
    'name':b1
}

let o2={
    'age':20
}
cc(o1)
let xx=Object.assign(o2,_.cloneDeep(o1))
cc(xx)
b1.name='asdfasd'
cc(o1)
cc(xx)

3 .拷貝繼承鏈 _.assignIn:類似于assign,但是會遍歷并繼承來源對象的屬性

function clone(origin){
    let originProto=Object.getPrototypeOf(origin)
    return Object.assign({},originProto, origin);
}

function assign(obj,arr){
    let re=Object.assign({},obj)
    for (let i of arr){
        Object.assign(re,clone(i))
    }
    cc(re)
    return re
}

assign({},[new f11,new foo])

4 ..assignWith():拷貝選項(xiàng)參數(shù)聪铺,在遍歷的時(shí)候先檢查屬性值化焕,如果屬性值不符合給定的約定函數(shù),那么不進(jìn)行合并
5 .
.at(object, [paths])

1 .如果是選object里面的數(shù)據(jù)的話铃剔,數(shù)組的參數(shù)是要要選的數(shù)據(jù)的路徑
var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };

c(_.at(object,['a[0].b.c'],'a[1]'))

let arr=['a','f','c']

c(_.at(arr,2))
2 .如果選的arr里面的數(shù)據(jù)的話撒桨,參數(shù)是數(shù)組內(nèi)的索引

create() :創(chuàng)建一個(gè)繼承對象的對象

1 .這個(gè)直接使用es6語法實(shí)現(xiàn),非常簡單
2 .這個(gè)不能寫成調(diào)用函數(shù)键兜,應(yīng)該始終使用語法來實(shí)現(xiàn)凤类,因?yàn)閟uper的時(shí)候需要繼承上個(gè)對象的屬性,這個(gè)如果把要繼承的對象按照一個(gè)函數(shù)的參數(shù)傳進(jìn)去的話普气,是無法得到這個(gè)東西的
3 .子類必須在sonstructor中調(diào)用super方法谜疤。子類自己的this對象,必須先通過父類的構(gòu)造函數(shù)完成塑造现诀,得到與父類同樣的實(shí)例屬性和方法夷磕,然后對其進(jìn)行加工,加上子類自己的實(shí)例屬性和方法仔沿,如果不調(diào)用super方法坐桩,子類就得不到this對象
4 .ES5繼承方式:先創(chuàng)建子類的實(shí)例對象this,然后將父類的方法添加到this上面
5 .ES6繼承機(jī)制:先將父類實(shí)例對象的屬性和方法于未,添加到this上面撕攒,然后在根據(jù)子類的構(gòu)造函數(shù)修改this.

1 .所以可以繼承原生構(gòu)造函數(shù)定義子類陡鹃,可以繼承父類的所有行為
2 .es6可以自定義原生的數(shù)據(jù)結(jié)構(gòu)(Array,String)的子類
3 .extends關(guān)鍵字不僅可以繼承類,還可以繼承原生的構(gòu)造函數(shù)

6 .super

1 .super最為函數(shù)調(diào)用抖坪,代表父類的構(gòu)造函數(shù)萍鲸,用在子類繼承的時(shí)候。
class Shape{
    constructor(x,y){
        this.x=x
        this.y=y
    }
    p(){
        return '2'
    }
    p2(){
        return this.x
    }

}
class Circle extends Shape{
    constructor(x,y,color){
        super(x,y)
        // 調(diào)用父類的constructor(x,y),
        // super雖然代表的是父類的構(gòu)造函數(shù)擦俐,但是返回的是子類的實(shí)例脊阴,super內(nèi)部的this指的是當(dāng)前的子類
        this.color=color;

        // console.log(super.x)
        // 指向父類的原型對象,所以定義在父類實(shí)例上的方法或者屬性是無法通過super調(diào)用的--返回undefined

        // console.log(super.p2())
        // 可以通過這樣的拐彎來實(shí)現(xiàn)可以訪問蚯瞧。其實(shí)訪問的是Shape.prototype.p()
        // 也就是說上面的x屬性如果這樣定義的話嘿期,是可以獲取到的
    }
    tostring(){
        console.log(super.p2())
        // 在子類普通方法內(nèi)使用super,內(nèi)部的this指向當(dāng)前的子類實(shí)例
    }
}
const c1=new Circle(10,10,'red')
2 .super作為對象時(shí)埋合,在普通方法中备徐,指向父類的原型對象,在靜態(tài)方法中甚颂,指向父類
3 .由于this指向子類實(shí)例蜜猾,如果不用this,而是使用super對某個(gè)屬性賦值,這時(shí)super就是this,賦值的屬性會變成子類實(shí)例的屬性
4 .

7 .類的prototype屬性與proto屬性(表示繼承振诬,或者說誰給了他這個(gè)屬性)

1 .子類的__proto__屬性蹭睡,表示構(gòu)造函數(shù)的繼承,總是指向父類
2 .子類prototype屬性的__proto__屬性赶么,表示方法的繼承肩豁,總是指向父類的prototype屬性
3 .
class b extends Object{}
// 子類繼承Object類
cc(b.__proto__==Object)
cc(b.prototype.__proto__==Object.prototype)

class bb{}
// 子類什么都繼承,就是個(gè)普通函數(shù)

cc(bb.__proto__==Function.prototype)
// 此時(shí)子類就是一個(gè)普通函數(shù)辫呻,所以直接繼承自Function.prototype
cc(bb.prototype.__proto__==Object.prototype)
// bb調(diào)用之后返回一個(gè)空對象清钥,所以指向構(gòu)造函數(shù)Object的prototype屬性

4 .實(shí)例的proto屬性:唯一作用,可以通過子類實(shí)例來修改父類實(shí)例的行為

class a{
    constructor(x){
        this.x=x
    }
}
class aa extends a{
    constructor(x){
        super(x)
    }
}

const a1=new a('10')
const a2=new aa()
cc(a2.__proto__.__proto__==a1.__proto__)
cc(a2.__proto__)
//aa{}
cc(a2.__proto__.__proto__)
// a{}
a2.__proto__.__proto__.say=function(){
    console.log('sasasa')
}
a2.say()
a1.say()

.defaults(object, [sources]),.defaultsDeep(object, [sources])

1 .分配來源對象的可枚舉屬性到目標(biāo)對象所有解析為 undefined 的屬性上印屁。 來源對象從左到右應(yīng)用循捺。 一旦設(shè)置了相同屬性的值,后續(xù)的將被忽略掉雄人。
2 .Object.assign()方法不能實(shí)現(xiàn)的東西

1 .對于object.assign來說从橘,如果第一個(gè)參數(shù)不是對象的話,則會先轉(zhuǎn)會對象
2 .對于非首參數(shù)出現(xiàn)非對象础钠,如果不能轉(zhuǎn)換為對象恰力,都是會跳過的。
3 .拷貝得屬性是有限制得旗吁,只能拷貝源對象的自身屬性踩萎,不拷貝不可枚舉的屬性enumerable:false
4 .淺拷貝:如果源對象某個(gè)屬性的值是對象,那么目標(biāo)對象拷貝的是這個(gè)對象的引用.lodash 的defaultsDeep實(shí)現(xiàn)了這個(gè)操作很钓,可以合并拷貝新的對象香府。
5 .同名屬性的替換:嵌套的對象董栽,遇到同名屬性,是替換企孩,而不是添加

const target = { a: { b: 'c', d: 'e' } }
const source = { a: { b: 'hello' } }

let o2=_.defaultsDeep({},target,source)
cc(o2)
//{ a: { b: 'c', d: 'e' } }
//注意在嵌套數(shù)組的合并中锭碳,也是按照外面的策略,如果原來有的話勿璃,就不再添加后面的了擒抛。
//解決的是object.assign方法整個(gè)替換a后面的情況

6 .取值函數(shù)的處理:只能進(jìn)行值的復(fù)制,如果要復(fù)制的是一個(gè)取值函數(shù)补疑,那么求值之后進(jìn)行復(fù)制
7 .

findKey()

1 .按照value的屬性來進(jìn)行條件選擇歧沪,返回整個(gè)key-vallue鍵值對


.forIn(object, [iteratee=.identity]):遍歷對象的自身和繼承的可枚舉屬性

1 .也是無法保證遍歷的順序

_.forOwn:遍歷自身的可枚舉屬性

1 .也是無法保證遍歷順序

_.functions:返回一個(gè)function對象自身可枚舉屬性名的數(shù)組

_.functionsIn:返回一個(gè)function對象和繼承的可枚舉屬性名的數(shù)組

_.get(object, path, [defaultValue]):根據(jù)對象路徑獲取值。如果解析value是undefined會以defaultValue取代

_.has(object,path):檢查path是否是對象的直接屬性

1 .返回對象的所有屬性莲组,然后進(jìn)行數(shù)組的檢查
2 .直接使用in 語法

_.invert(obj):反轉(zhuǎn)對象的key和value

1 ..invertBy(obj,fn):傳入兩個(gè)參數(shù)诊胞,反轉(zhuǎn)對象的key和value,并且在反轉(zhuǎn)的時(shí)候?qū)ey進(jìn)行處理
2 .
.invertByAll(obj,fn1,fn2):傳入3隔參數(shù)锹杈,反轉(zhuǎn)對象的key和val厢钧,并且在反轉(zhuǎn)的時(shí)候同時(shí)對key,value進(jìn)行處理

let obj={
    'name':'libater',
    'age':20
}
cc(_.invert(obj))
cc(_.invertBy(obj,(k)=>{
    return 'change'+k
}))

一些按照路徑選擇key,value的函數(shù)

1 ._.invoke(object, path, [args])
2 .

_.keys()

1 .創(chuàng)建object自身可枚舉屬性名為一個(gè)數(shù)組(非對象的值會被強(qiáng)制轉(zhuǎn)換為對象)
2 ..keysIn()創(chuàng)建object自身或繼承的可枚舉屬性名為一個(gè)數(shù)組
3 .
.mapKeys()這個(gè)方法創(chuàng)建一個(gè)對象嬉橙,對象的值與源對象相同,但 key 是通過 iteratee 產(chǎn)生的寥假。
4 ..mapValues()創(chuàng)建一個(gè)對象市框,對象的key相同,值是通過 iteratee 產(chǎn)生的糕韧。 iteratee 會傳入3個(gè)參數(shù): (value, key, object)
5 .
.values()
6 ._.valuesIn()

_.merge()

1 .遞歸合并來源對象的自身和繼承的可枚舉屬性到目標(biāo)對象枫振,跳過來源解析為undefined的屬性,數(shù)組和普通對象會遞歸合并萤彩,其他對象和值會被直接分配粪滤。來元對象從左到右分配,后續(xù)的來源對象屬性會覆蓋之前分配的屬性
2 ..mergewith(object, sources, customizer):類似于merge雀扶,但是接收一個(gè)參數(shù)決定如何合并杖小,如果customizer返回undefined將會由合并處理方法代替
3 .
.

_.omit(object, [props])

1 .返回忽略屬性之外的自身和繼承的可枚舉屬性。就是刪去括號里面的屬性
2 .這個(gè)方法其實(shí)很弱智啊愚墓。自己寫的話很簡單啊
3 ..omitBy(object, [predicate=.identity])進(jìn)過predicate判斷是不是真值的屬性和自身和繼承的可枚舉屬性
4 ._.

_.pick(object, [props])

1 .從一個(gè)對象選出選中屬性的對象
3 .pickBy(object, [predicate=.identity]):類似上面的東西

_.result(object, path, [defaultValue])

1 .除了如果解析得到的值是一個(gè)函數(shù)的話予权,就綁定this到這個(gè)函數(shù)并返回執(zhí)行后的結(jié)果。
2 .

_.set(object, path, value)

1 .設(shè)置值到對象對應(yīng)的屬性路徑上浪册,如果沒有則創(chuàng)建這部分路徑扫腺。 缺少的索引屬性會創(chuàng)建為數(shù)組,而缺少的屬性會創(chuàng)建為對象
2 ._.unset(obj,path):移除對象路徑的屬性

_.toPairs(obj)

1 .創(chuàng)建一個(gè)對象自身可枚舉屬性的鍵值對數(shù)組
2 ._.toPaireIn():創(chuàng)建一個(gè)對象自身和繼承的可枚舉屬性的鍵值對數(shù)組

_.to

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末村象,一起剝皮案震驚了整個(gè)濱河市笆环,隨后出現(xiàn)的幾起案子攒至,更是在濱河造成了極大的恐慌,老刑警劉巖躁劣,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迫吐,死亡現(xiàn)場離奇詭異,居然都是意外死亡习绢,警方通過查閱死者的電腦和手機(jī)渠抹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闪萄,“玉大人梧却,你說我怎么就攤上這事“苋ィ” “怎么了放航?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長圆裕。 經(jīng)常有香客問我广鳍,道長,這世上最難降的妖魔是什么吓妆? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任赊时,我火速辦了婚禮,結(jié)果婚禮上行拢,老公的妹妹穿的比我還像新娘祖秒。我一直安慰自己,他們只是感情好舟奠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布竭缝。 她就那樣靜靜地躺著,像睡著了一般沼瘫。 火紅的嫁衣襯著肌膚如雪抬纸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天耿戚,我揣著相機(jī)與錄音湿故,去河邊找鬼。 笑死溅话,一個(gè)胖子當(dāng)著我的面吹牛晓锻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播飞几,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼砚哆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起躁锁,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤纷铣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后战转,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搜立,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年槐秧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了啄踊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刁标,死狀恐怖颠通,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膀懈,我是刑警寧澤顿锰,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站启搂,受9級特大地震影響硼控,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜胳赌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一牢撼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧疑苫,春花似錦浪默、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碰逸。三九已至乡小,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饵史,已是汗流浹背满钟。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胳喷,地道東北人湃番。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像吭露,于是被迫代替她去往敵國和親吠撮。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容