js 自定义插件封装

在学习插件封装时,下面两种原型继承开发的区别是什么?

function Dialog(){}

Dialog.prototype.fun1 = function(){
console.log("fun1");
}

Dialog.prototype.fun2 = function(){
console.log("fun2");
}


Dialog.prototype = {

constructor: this,
fun1:function(){

console.log("fun1");   

},
fun2:function(){

console.log("fun2");   

}
}

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 3.2k
3 个回答

第一个是在现有链上添加东西,第二种是指向另外一条链
另外,你的this是什么鬼

作用一样,但是第二中会重写原型链,如果你不把constructor指回去给当前这个,那么constructor是变成指向object,不是你定义的这个函数了。

是不是想问这个问题?
通过原型链实现继承的时候,不能使用对象字面量创建原型方法,因为这样会重写原型链

function SuperType() {
    this.property = true;
}

SuperType.prototype.getSuperValue = function () {
    return this.property;
}

function SubType() {
    this.subproperty = false;
}

//继承了SuperType 
SubType.prototype = new SuperType();

//使用字面量添加新方法,会导致上一行代码无效 
SubType.prototype = {
    getSubValue: function () {
        return this.subproperty;
    },
    someOtherMethod: function () {
        return false;
    }

}
var instance = new SubType();
alert(instance.getSuperValue()); //error
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题