Rumah > Soal Jawab > teks badan
Bolehkah atribut jenis objek ini diletakkan hanya dalam pembina atau adakah dipersetujui bahawa atribut objek dalam prototaip tidak dibenarkan diubah suai untuk mengelakkan kesan contoh subkelas pada kelas induk dan subkelas lain? Adakah terdapat apa-apa lagi penyelesaian?
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('设置实例c1之前,父类的sex值:',parent.prototype.sex);
console.log('设置实例c1之前,实例c2的sex值:',c2.sex);
c1.sex.push('其他');
console.log('设置实例c1之后,父类的sex值:',parent.prototype.sex);
console.log('设置实例c1之后,实例c2的sex值:',c2.sex);
扔个三星炸死你2017-06-30 10:01:00
Kaedah ini membolehkan subkelas dan objek mengakses seks Jika seks tidak wujud, salinan jantina kelas ibu bapa akan dibuat untuknya.
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('设置实例c1之前,父类的sex值:', parent.prototype.sex);
console.log('设置实例c1之前,实例p1的sex值:', p1.sex);
console.log('设置实例c1之前,实例c2的sex值:', c2.sex);
c1.sex.push('其他');
console.log('设置实例c1之后,父类的sex值:', parent.prototype.sex);
console.log('设置实例c1之后,实例p1的sex值:', p1.sex);
console.log('设置实例c1之后,实例c1的sex值:', c1.sex);
console.log('设置实例c1之后,实例c2的sex值:', c2.sex);
伊谢尔伦2017-06-30 10:01:00
Subkelas mentakrifkan atribut dengan nama yang sama, mengatasi kelas induk?
学习ing2017-06-30 10:01:00
Apabila memulakan subkelaschild
, tentukan atribut peribadi:
function child() {
this.sex = '';
}