想用原生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

你可以直接把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)

添加回答
举报
0/150
提交
取消
