var Scope = function () {
this.$clone = function () {
return Object.create(this);
}
}
var scopeA = new Scope();
scopeA.title = 'My title';
var scopeB = scopeA.$clone() ;
// 實(shí)例有$clone方法用創(chuàng)建一個(gè)對(duì)象克隆,表現(xiàn)如下
console.log(scopeB.title === 'My title'); // 輸出 true
scopeA.title = 'Home title';
console.log(scopeB.title === 'Home title')// 輸出true
// 但是一旦scopeB主動(dòng)修改它的屬性,scopeA并不受影響
scopeB.title = 'scopeB title';
console.log(scopeA.title === 'Home title') // 輸出true
這道題礁遵,要實(shí)現(xiàn)一個(gè)克隆函數(shù),一看就是原型鏈的效果采记,就利用Object.create()來繼承prototype
create也就是proto指向它的原型佣耐,
如果是用{}來新建一個(gè)對(duì)象的話,那么這個(gè)對(duì)象也能夠用Object.create來實(shí)現(xiàn)原型繼承唧龄,但是不能用prototype
b-->a-->Object
c-->a.prototype
而function.prototype是針對(duì)構(gòu)造函數(shù)的兼砖,如果這個(gè)函數(shù)被實(shí)例化,那么它的原型指向這個(gè)構(gòu)造函數(shù)的prototype
Paste_Image.png