想用原生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>
当一个函数作为构造函数使用时,如果函数没有明确的返回值,那么在调用的时候会生成一个this,并把这个this返回,这个返回值也就是我们所说的实例。但是当你在构造函数中明确返回一个对象的时候,这个对象就会被返回,而不是那个this,所以在你的例子中你明确返回了一个对象,所以当你调用
new a(name)
的时候,返回值就是这个对象就是一个普通的对象,不是a的实例,所以没有a原型上面的方法,
你可以直接把
say1
放在this
上,代码如下: