我看到我是否可以制作一些面向对象的javascript,并且我有以下代码。
当我将我的jquery事件处理程序移动到构造函数中时,我感到困惑,因为现在我有两个这个变量......
我接近这个错误还是有办法让它起作用?
function Dropdown(ddlname) {
this.Value = 0;
this.Selected = false;
this.DDL = ddlname;
this.Limited = false;
this.SelectLast = function () {
$(this.DDL + ' option:last').attr('selected', 'selected');
}
$(ddlname).change(function () {
var v = $(this).val(); // <== ?
if (typeof v == 'number') {
this.Value = v; // <== ?
this.Selected = true; // <== ?
}
});
return true;
};
答案 0 :(得分:3)
您需要将构造函数的上下文中的“this”赋给局部变量,以便能够在jquery事件处理程序中引用它。
function Dropdown(ddlname) {
this.Value = 0;
this.Selected = false;
this.DDL = ddlname;
this.Limited = false;
var hold = this;
this.SelectLast = function () {
$(hold.DDL + ' option:last').attr('selected', 'selected');
}
$(ddlname).change(function () {
var v = $(this).val(); // <== ?
if (typeof v == 'number') {
hold.Value = v; // <== ?
hold.Selected = true; // <== ?
}
});
return true;
};
答案 1 :(得分:2)
我从微软的DataJS团队的Marcelo Ruiz那里学到的一个技巧如下:
function Dropdown(ddlname)
{
var that = this;
//rest of your code. now there is no confusion of this since you have that :)
};
不确定这是否会对您有所帮助。但这只是我学到的一招。
答案 2 :(得分:0)
是的,您可以,但您需要在文档就绪功能中调用该类。我很确定这是不好的做法。
您应该考虑将$传递给构造函数或创建jQuery扩展。