为了账号安全,请及时绑定邮箱和手机立即绑定

关于prototype写插件

关于prototype写插件

慕运维8079593 2019-02-19 16:18:53
想用原生js写插件,js文件名为a.js//a.js(function(document, window){    var a = function(name){        ...        var say = function(){            alert(1);        }        return {            say1: say        }    }    a.prototype.say2 = function(){        alert(1);    }    //暴露出来    window.a = a;})(document , window)主文件引入a.js后 <script>     var aa = new a(name);     aa.say1()  //这种没问题     aa.say2()  //利用prototype扩展的函数为什么会报错呢</script>
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

当一个函数作为构造函数使用时,如果函数没有明确的返回值,那么在调用的时候会生成一个this,并把这个this返回,这个返回值也就是我们所说的实例。但是当你在构造函数中明确返回一个对象的时候,这个对象就会被返回,而不是那个this,所以在你的例子中你明确返回了一个对象,所以当你调用new a(name)的时候,返回值就是


{

    say1: say

}

这个对象就是一个普通的对象,不是a的实例,所以没有a原型上面的方法,


a instanceof aa // false

https://img1.sycdn.imooc.com//5c73a3720001fb6003630195.jpg


你可以直接把say1放在this上,代码如下:


(function(document, window){

    var a = function(name){

        ...

        var say = function(){

            alert(1);

        }

        this.say1 = say

    }

    a.prototype.say2 = function(){

        alert(1);

    }

    //暴露出来

    window.a = a;

})(document , window)

https://img1.sycdn.imooc.com//5c73a36e0001de3406070392.jpg


查看完整回答
反对 回复 2019-02-25
  • 1 回答
  • 0 关注
  • 435 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号