国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

javascript - JS繼承,如何避免父類原型的object類型屬性會(huì)受子類影響的情況;

瀏覽:141日期:2023-04-18 13:53:11

問(wèn)題描述

parent為父類,child繼承parent,當(dāng)修改child實(shí)例的sex的值時(shí),會(huì)引起parent其他子類實(shí)例sex的變更;這類object類型的屬性是否只能放在構(gòu)造函數(shù)內(nèi),或者約定好不允許修改prototype中的object屬性,來(lái)避免子類實(shí)例對(duì)父類和其他子類的影響;有沒有其他的解決方案?

function extend(p, c) {var f = function () {};f.prototype = p.prototype;c.prototype = new f();c.prototype.constructor = c; } function parent() {} parent.prototype.aaa = 123; parent.prototype.sex = [’男’, ’女’]; function child() {} extend(parent, child); c1 = new child(); c2 = new child(); console.log(’設(shè)置實(shí)例c1之前,父類的sex值:’,parent.prototype.sex); console.log(’設(shè)置實(shí)例c1之前,實(shí)例c2的sex值:’,c2.sex); c1.sex.push(’其他’); console.log(’設(shè)置實(shí)例c1之后,父類的sex值:’,parent.prototype.sex); console.log(’設(shè)置實(shí)例c1之后,實(shí)例c2的sex值:’,c2.sex);

javascript - JS繼承,如何避免父類原型的object類型屬性會(huì)受子類影響的情況;

問(wèn)題解答

回答1:

這個(gè)方式可以讓子類和對(duì)象訪問(wèn) sex 的時(shí)候,如果 sex 不存在則為其創(chuàng)建一個(gè)父類 sex 的副本,存在則直接返回。

function extend(p, c) { var f = function() {}; f.prototype = p.prototype; c.prototype = new f(); c.prototype.constructor = c;}function parent() {}parent.sex = [’男’, ’女’];parent.prototype.aaa = 123;Object.defineProperty(parent.prototype, ’sex’, { configurable: true, enumerable: true, get: function () { if (this === parent || this === parent.prototype) { return parent.sex; } if (!this.hasOwnProperty(’sex’)) { Object.defineProperty(this, ’sex’, {value: parent.sex.slice(),configurable: true,enumerable: true,writable: true }); } return this.sex }, set: function (value) { if (this === parent || this === parent.prototype) { parent.sex = value; } else if (!this.hasOwnProperty(’sex’)) { Object.defineProperty(this, ’sex’, {value: value,configurable: true,enumerable: true,writable: true }); } else { this.sex = value; } }});function child() {}extend(parent, child);var c1 = new child();var c2 = new child();var p1 = new parent();console.log(’設(shè)置實(shí)例c1之前,父類的sex值:’, parent.prototype.sex);console.log(’設(shè)置實(shí)例c1之前,實(shí)例p1的sex值:’, p1.sex);console.log(’設(shè)置實(shí)例c1之前,實(shí)例c2的sex值:’, c2.sex);c1.sex.push(’其他’);console.log(’設(shè)置實(shí)例c1之后,父類的sex值:’, parent.prototype.sex);console.log(’設(shè)置實(shí)例c1之后,實(shí)例p1的sex值:’, p1.sex);console.log(’設(shè)置實(shí)例c1之后,實(shí)例c1的sex值:’, c1.sex);console.log(’設(shè)置實(shí)例c1之后,實(shí)例c2的sex值:’, c2.sex);回答2:

子類定義一個(gè)同名屬性, 覆蓋父類的?

回答3:

非方法的屬性不推薦設(shè)置在原型上

回答4:

在初始化子類child時(shí)候,定義私有屬性:

function child() { this.sex = ’’;}

標(biāo)簽: JavaScript
主站蜘蛛池模板: 亚洲成成品网站有线 | 在线观看国产日韩 | 久久精品国产99久久 | 欧美色欧美亚洲高清在线视频 | 丝袜毛片 | 国产午夜三区视频在线 | 高清国产在线观看 | 手机看片自拍日韩日韩高清 | 韩国福利一区 | 成人国产在线看不卡 | 成年人免费观看视频网站 | 成人毛片视频免费网站观看 | 日韩一级片播放 | 台湾精品视频在线播放 | 99久久免费精品 | 亚洲精品高清国产麻豆专区 | 亚洲国产一区二区在线 | 亚洲免费在线观看视频 | 国产91精品久久久久久久 | 香蕉国产人午夜视频在线观看 | 香港a毛片免费全部播放 | 美国一级大黄香蕉片 | 成人毛片国产a | 亚洲欧美精品一区 | 亚洲国产精品a一区二区三区 | 99久久精品免费看国产高清 | 久久毛片视频 | 成人欧美精品一区二区不卡 | 国产日产欧美a级毛片 | 国产欧美日本在线观看 | 久久精品国产亚洲aa | 高清午夜看片a福利在线观看琪琪 | 欧美成人高清在线视频大全 | 久久久高清免费视频 | 精品国产中文一级毛片在线看 | 亚洲成aⅴ人片在线影院八 亚洲成av人片在线观看 | 亚洲视频免费在线看 | 国产欧美日韩精品第二区 | 无限观看社区在线视频 | 久久久久久国产精品视频 | 草草影院免费 |