继承

2018-02-18  本文已影响17人  马建阳
function Dialog(target) {
    this.target = target
}
Dialog.prototype.show = function() {
    console.log(this.target + ' show')
}
Dialog.prototype.hide = function() {
    console.log(this.target + ' hide')
}
var dialog = new Dialog('body')
dialog.show()

function Message(target, name) {
    Dialog.call(this, target)     //这句很重要
    this.name = name
}
Message.prototype = Object.create(Dialog.prototype)   //这句更重要
Message.prototype.success = function() {
    console.log(this.name + ' success' )
}

var msgBox = new Message('main', 'msg')
msgBox.show()
msgBox.success()

画成原型图

点击查看原图

Dialog.call(this, target)的作用是: 执行函数 Dialog(target),执行的过程中里面遇到 this 换成当前传递的 this

Object.create(Dialog.prototype)的作用是:创建一个空对象,空对象的__proto__等于 Dialog.prototype
Object.create 源码:

Object.create = function (a){
     function Person(){
    } 
    Person.protype=a//a赋值给Person.protype,相当于a替换了Person.protype
    let b = new Person
    return b
} 

ES6

class Dialog{
    constructor(target){
        this.target = target
    }
    show(){
        console.log(this.target + 'show')
    }
    hide(){
        console.log(this.target + 'hide')
    }
}
class Message extends Dialog{
    constructor(target,name){
        super(target)//如果是super()表示直接调用父类构造函数
        //super必须在后面使用this之前
        this.name = name
    }
    success(){
        console.log(this.name + 'success')
    }
}
var msgBox = new Message('main','msg')
msgBox.show()
msgBox.success()
console.log(msgBox)
上一篇下一篇

猜你喜欢

热点阅读