JavaScript類の継承
3047 ワード
// superclass
function Person(first, last) {
this.first = first
this.last = last
}
Person.prototype = {
fullName: function() {
console.log(this.first + ',' + this.last)
},
fullNameReversed: function() {
console.log(this.first + this.last)
},
sayHello: function(str) {
alert(str)
},
}
// subclass
function cuteGirl(args) {
Person.apply(this, args)
// Person this cuteGirl
}
// subclass extends superclass
cuteGirl.prototype = Object.create(Person.prototype)
// , Person.prototype
cuteGirl.prototype.constructor = cuteGirl
// cuteGirl , cuteGirl.prototype
var xiaohong = new cuteGirl(['xiao', 'hong'])
xiaohong.sayHello('hhh') //
xiaohong.fullName() // xiao,hong
xiaohong.fullNameReversed() // xiaohong
// superclass
function Person (first, last) {
this.first = first
this.last = last
}
Person.prototype = {
fullName:function() {
console.log(this.first + ',' + this.last)
},
fullNameReversed:function() {
console.log(this.first + this.last)
},
sayHello:function (str) {
alert(str)
},
}
function Girl (sex) {
this.sex = sex
}
Girl.prototype = {
saySex:function () {
console.log(this.sex)
}
}
// subclass
function cuteGirl (args, sex) {
Person.apply(this, args)
Girl.call(this, sex)
}
// subclass extends superclass
// cuteGirl.prototype = Object.create(Person.prototype)
Object.assign(cuteGirl.prototype, Person.prototype, Girl.prototype)
cuteGirl.prototype.constructor = cuteGirl
var xiaohong = new cuteGirl(['xiao','hong'], ' ')
xiaohong.sayHello('hhh') //
xiaohong.fullName() // xiao,hong
xiaohong.fullNameReversed() // xiaohong
xiaohong.saySex() //
Object.assign()メソッドは、列挙可能な属性のすべての値を1つまたは複数のソースオブジェクトから対象オブジェクトにコピーするために使用されます.ターゲットオブジェクトに戻ります.Object.assign(targt,…sources)の2つのパラメータは、最初はターゲットオブジェクトであり、後はソースオブジェクトであり、この方法の戻り値はターゲットオブジェクトである.Object.assign(cuteGirl.prototype, Person.prototype, Girl.prototype)
このコードの役割はPersonとGirlのプロトタイプをすべてcuteGirlに加えることです.また、第一のシングル継承は
cuteGirl.prototype = Object.create(Person.prototype)
を使わずに、直接cuteGirl.prototype = Person.prototype)
を使ってもいいです.