变量范围:this.remove不是函数
this.remove()不是函数。 怎么会?
var vehicle = function () { return { init: function () { jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) { e.preventDefault(); this.remove(); }); }, remove: function () { alert('test'); } } }(); jQuery().ready(vehicle.init);
对困惑感到抱歉。 我正在尝试调用自己的“删除”function。 这只是一个管理我页面上的车辆的类。 这是它的开始,它将具有比init / remove更多的function。
既然你说你试图调用自己的remove
函数,这里是如何做到的:
var vehicle = (function () { return { init: function () { var that = this; // step one jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) { e.preventDefault(); that.remove(); }); }, remove: function () { alert('test'); } } }()); // step zero - wrap the immediate invocation in parens jQuery(function () { vehicle.init(); // step two );
this
是一个DOM元素。 要使用jQuery的.remove()
方法,需要将其包装在jQuery对象中。
$(this).remove();
编辑:如果您希望调用vehicle
对象中的remove()
函数,则调用:
vehicle.remove();
此外,如果您希望缩短.ready()
调用,则可以执行以下操作:
jQuery(vehicle.init);
从jQuery 1.4发行说明 :
jQuery().ready()
技术仍然适用于1.4,但它已被弃用。 请使用jQuery(document).ready()
或jQuery(function(){})
。
也许你正在寻找这样的东西?
var vehicle = new function () { var self = this; this.init = function () { jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) { e.preventDefault(); self.remove(); }); }; this.remove = function () { alert('test'); }; };
……或者喜欢这样吗? 要告诉你的目标很难……
var vehicle = new function () { function remove () { alert('test'); } this.init = function () { jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) { e.preventDefault(); remove.call(this); }); }; };
注意 – 我们都有些困惑,因为你不清楚要调用哪个“删除”function。
问题是你传递了对“init”函数的引用,但是当它被调用时,“this”变量将引用window对象,而不是“vehicle”的值。 为什么? 因为在Javascript中,“this”值仅取决于函数的调用方式。 在同一个对象中定义两个函数的事实与它完全无关。
尝试这样做:
jQuery(function() { vehicle.init(); });
当你以这种方式调用“init”函数时 – 通过显式地将其作为“vehicle”对象的属性引用 – 然后Javascript将“this”绑定到“vehicle”的值。
编辑哦等等我只是注意到你也将不得不修改你的“init”函数,因为“click”处理程序中的代码将由jQuery调用,以便将“this”绑定在受影响元素的上下文。 因此,如果你想保持“车辆”参考,你会这样做:
init: function () { var originalThis = this; jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) { e.preventDefault(); originalThis.remove(); }); },
var vehicle = function () { return { init: function () { var self = this; jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) { e.preventDefault(); self.remove(); }); }, remove: function () { alert('test'); } } }(); jQuery().ready(function() { vehicle.init(); });
当调用函数作为方法时,“this”指的是调用它的对象。 在jQuery中,传递的函数被调用为html元素的方法,因此“this”成为元素。
要确保引用正确的对象,您需要创建对原始对象的引用。
var vehicle = function () { var that = { init: function () { jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) { e.preventDefault(); that.remove(); }); }, remove: function () { alert('test'); } } return that; }(); jQuery().ready(vehicle.init);