<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
要點: 原型鏈繼承、借用建構函式繼承、組合繼承、原型式繼承、寄生式繼承、寄生組合式繼承、ES6 Class
答:
缺點:
//原型鏈繼承 function Parent() { this.parentPrototype = "parent prototype" //驗證這種繼承方法的確定,如果父類別範例中存在一個參照型別的屬性,將會被所有子類共用 this.parentObj = { info: "我是 parent 參照屬性parentObj中的 info" } } function Children() { } //將Children的原型物件指定為Parent的範例,通過原型鏈,將Parent中的屬性賦值給Children範例 Children.prototype = new Parent(); const a = new Children(); console.log(a.parentPrototype); // parent prototype //缺點 const b = new Children(); //在a範例中改動繼承的參照屬性 a.parentObj.info = "我是a範例中 參照屬性parentObj中的 info" //b與a範例共用參照屬性 console.log(b.parentObj.info); // 我是a範例中 參照屬性parentObj中的 info
優點:
缺點:
function Parent() { this.parentPrototype = "parent prototype" this.obj = { info: "parent obj info" } this.fn = function () { console.log("列印功能") } } function Children() { Parent.call(this); } const a = new Children(); console.log(a.parentPrototype); // parent ptototype //缺點 此時Parent()會再次建立一個fn函數,這個是沒有必要的 const b = new Children(); a.obj.info = "a obj info"; //優點 避免了子類範例共用參照屬性 console.log(b.obj.info) // parent obj info;
優點:
function Parent() { this.parentPrototype = "我是Parent 中的屬性" } //Parent中的方法,在原型上定義 Parent.prototype.pFn = function () { console.log('我是Parent中的方法'); } function Children() { //Parent中的屬性仍然在建構函式中繼承 Parent.call(this); } //將Children的原型物件賦值為 Parent範例,這樣Parent中的方法也能夠被Children繼承 Children.prototype = new Parent(); const c = new Children(); console.log(c.parentPrototype); //我是Parent 中的屬性 c.pFn(); //我是Parent中的方法
缺點: - 1.包含參照型別的屬性值始終都會共用相應的值,這點跟原型鏈繼承一樣。
function objFn(o) { o.objFnPrototype = "我是 objFnPrototype" function F() {} F.prototype = o; return new F(); } let a = objFn({ name: "name1" }); console.log(a.name); //name1 console.log(a.objFnPrototype); //我是 objFnPrototype
缺點:
function createObje(obj) { let clone = Object.assign(obj); //接受到物件後,原封不動的建立一個新物件 clone.prototype1 = "我是新增的prototype1"; //在新物件上新增屬性,這就是所謂的寄生 return clone; //返回新物件 } const parent = { parentPrototype: "parentPrototype" } //c範例,就繼承了parent的所有屬性 let c = createObje(parent); console.log(c.parentPrototype); //parentPrototype
優點:
function inherProto(superType, subType) { //拷貝一個超類的原型副本 let proto = { ...superType.prototype }; //將原型的超類副本作為子類的原型物件,也就是第一種中的原型鏈繼承方式,只不過繼承的是超類原型的副本 subType.prototype = proto; //這一步比較迷,官方的說法是,我們在拷貝超類的原型的時候,拷貝的proto物件,將會丟失預設自己的建構函式,也就是superType, //所以我們這裡將它的建構函式補全為subType。貌似不做這一步也沒啥問題,但是缺了點東西可能會有其他的副作用,所以還是補上 proto.constructor = subType; } function Super() { this.superProto = "super proto"; this.colors = ["red", "yelloy"]; } function Sub() { this.subProto = "sub proto"; this.name = "sub name"; //這裡還是借用建構函式的套路 Super.call(this); } Super.prototype.getName = function () { console.log(this.name); } //這裡要在定義完Super的屬性後執行,因為繼承的是超類原型的副本,與Super.prototype是兩個物件,在這之後再改變Super.prototype,就已經不會在影響到Sub所繼承的副本超類原型物件了 inherProto(Super, Sub); let a = new Sub(); console.log(a.getName);
以上就是js面試題繼承的方法及優缺點解答的詳細內容,更多關於js面試題繼承方法優缺點的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45