这段jquery插件的代码为什么报错了?
$.c=function(){this.dd=1;this.prototype.dd2=function(){//这里的this用this报错Cannotsetprope...
$.c=function(){
this.dd=1;
this.prototype.dd2=function(){//这里的this用this报错Cannot set property 'dd2' of undefined ,但用$.c可以
alert(this.dd);
}
console.log(this);
}
var t=$.c;
var qq=new t;
qq.dd2(); 展开
this.dd=1;
this.prototype.dd2=function(){//这里的this用this报错Cannot set property 'dd2' of undefined ,但用$.c可以
alert(this.dd);
}
console.log(this);
}
var t=$.c;
var qq=new t;
qq.dd2(); 展开
展开全部
因为没有理解 prototype 的含义。
prototype 应该用在构造函数上。
你代码里,构造函数是 $.c。
在用 new t 来构造一个对象的时候,this 就指向那个对象(在你的例子里是 qq 这个变量)。而 qq 这个变量没有 prototype 这个属性。因此你用 this.prototype 的时候就出错了。
一个比较优雅的写法是:
// 构造函数
function MyClass(){
this.dd = 1;
}
// 向原型中添加方法
MyClass.prototype.dd2 = function(){
alert(this.dd);
};
// 导出构造函数
$.c = MyClass;
// 测试
var t=$.c;
var qq=new t;
qq.dd2();
展开全部
只有function对象有prototype,这里的this应该是$,$不是function对象吧。
追问
js写面向对象的时候,不是这样写的吗:
function aaa(){
this.a=1;
this.b=function(){
}
}
这样的this就是指function对象吧
追答
this指向调用这个函数的对象,如果用作构造函数,比如var o = new aaa();this指向新创建的对象。定义构造函数时,方法名首字母一般大写。你的代码可以改写如下:
$.c = function(){
this.dd = 1;
};
$.c.prototype.dd2 = function(){
alert(this.dd);
};
var t = $.c;
var qq = new t();
qq.dd2();
望采纳!!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询