亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

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

問題描述

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

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è)置實例c1之前,父類的sex值:’,parent.prototype.sex); console.log(’設(shè)置實例c1之前,實例c2的sex值:’,c2.sex); c1.sex.push(’其他’); console.log(’設(shè)置實例c1之后,父類的sex值:’,parent.prototype.sex); console.log(’設(shè)置實例c1之后,實例c2的sex值:’,c2.sex);

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

問題解答

回答1:

這個方式可以讓子類和對象訪問 sex 的時候,如果 sex 不存在則為其創(chuàng)建一個父類 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è)置實例c1之前,父類的sex值:’, parent.prototype.sex);console.log(’設(shè)置實例c1之前,實例p1的sex值:’, p1.sex);console.log(’設(shè)置實例c1之前,實例c2的sex值:’, c2.sex);c1.sex.push(’其他’);console.log(’設(shè)置實例c1之后,父類的sex值:’, parent.prototype.sex);console.log(’設(shè)置實例c1之后,實例p1的sex值:’, p1.sex);console.log(’設(shè)置實例c1之后,實例c1的sex值:’, c1.sex);console.log(’設(shè)置實例c1之后,實例c2的sex值:’, c2.sex);回答2:

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

回答3:

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

回答4:

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

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

標(biāo)簽: JavaScript
主站蜘蛛池模板: 亚洲免费成人网 | 亚洲精品一区二区三区福利 | 精品一区二区久久久久久久网站 | 中国护士一级毛片免费版本 | 国产免费不卡视频 | 中文字幕欧美成人免费 | 久久99精品国产99久久6男男 | 一级毛片日韩a欧美视频 | 在线观看www妖精免费福利视频 | 日韩在线观看视频黄 | 久久天天躁日日躁狠狠躁 | 韩毛片| 一级一级人与动毛片 | 成人黄页网站 | 国产草逼视频 | 欧美黄色影视 | 一级黄毛片| 国产aⅴ自拍 | 91porn国产| 免费自拍视频 | www黄色com | 羞羞答答91麻豆网站入口 | 亚洲经典自拍 | 一区二区三区高清在线 | 国产成+人欧美+综合在线观看 | 久久蜜桃亚洲一区二区 | 国产在线一区二区三区在线 | 亚洲色图图片 | 青青伊人91久久福利精品 | 久久精品综合国产二区 | 日韩视频免费一区二区三区 | 青青国产成人久久91网站站 | 1769国产精品视频免费观看 | 国产一级片视频 | 色多多视频成人影院 | 国产亚洲精品久久久久久久久激情 | 91亚洲国产成人精品性色 | 91刘亦菲精品福利在线 | 国产成人精品美女在线 | 国产日产亚洲欧美综合另类 | 久久综久久美利坚合众国 |