生活随笔
收集整理的這篇文章主要介紹了
ES5-14 【utils】三目运算符、对象克隆、浅拷贝、深拷贝
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
淺拷貝
for-in(遍歷一個實例對象,原型上的屬性也會打印)
Object
.prototype
.num
= 1
function
shallowClone(origin
, target
) {for (var key in origin
) {target
[key
] = origin
[key
]}
}
var p1
= {name
: '人類',daughter
: {first
: 'Jessica',}
}
var p2
= {}
shallowClone(p1
, p2
)
p2
.daughter
.second
= 'Krystal'
console
.log(p1
, p2
)
Object
.prototype
.num
= 1
function
shallowClone(origin
, target
) {var tar
= target
|| {}for (var key in origin
) {if (origin
.hasOwnProperty(key
)) {tar
[key
] = origin
[key
]}}return tar
}
var p1
= {name
: '人類',daughter
: {first
: 'Jessica',}
}
var p2
= shallowClone(p1
)
p2
.daughter
.second
= 'Krystal'
console
.log(p1
, p2
)
深拷貝
var baseType
= ['[object String]', '[object Null]', '[object Undefined]', '[object Boolean]', '[object Number]']
Object
.prototype
.num
= 1
function
isBaseType(target
) {return baseType
.includes(Object
.prototype
.toString
.call(target
))
}
function
deepClone(origin
, target
) {var tar
= target ? target
: Array
.isArray(origin
) ?
[] : {} for (var key in origin
) {if (isBaseType(origin
[key
]) && origin
.hasOwnProperty(key
)) {tar
[key
] = origin
[key
]} else if (!isBaseType(origin
[key
])) {tar
[key
] = deepClone(origin
[key
], tar
[key
]) }}return tar
}
var p1
= {name
: '人類',daughter
: {first
: 'Jessica',grandSon
: [12, 15]}
}
var p2
= deepClone(p1
)
p2
.daughter
.second
= 'Krystal'
p2
.daughter
.grandSon
.pop()
console
.log(p1
, p2
)
var p1
= {name
: '人類',daughter
: {first
: 'Jessica',grandSon
: [12, 15],fun
: function
() { }}
}
var str
= JSON
.stringify(p1
)
var p2
= JSON
.parse(str
)
console
.log('p1', p1
)
console
.log('str', str
)p2
.daughter
.second
= 'Krystal'
p2
.daughter
.grandSon
.pop()
console
.log('p2', p2
)
練習
注意
注意
function
Foo() {getName
= function
() { console
.log(1)}return this
}
Foo
.getName
= function
() {console
.log(2)
}
Foo
.prototype
.getName
= function
() {console
.log(3)
}
var getName
= function
() {console
.log(4)
}
function
getName() {console
.log(5)
}
Foo
.getName()
getName()
Foo().getName()
getName()
new Foo
.getName()
new Foo().getName()
new new Foo().getName()
GO
= {getName
:undefined(變量聲明)
- fn(函數聲明
) - 新fn(變量賦值)
- 新fn
}
- 判斷閏年(整除4&&不能整除100 || 整除400)
總結
以上是生活随笔為你收集整理的ES5-14 【utils】三目运算符、对象克隆、浅拷贝、深拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。