以下脚本呈现 Kendo UI 组合框控件所需的字段背景颜色。虽然这个脚本运行得很好,但我发现很难理解它。
据我所知,它从附加自定义属性或方法开始
所谓的 _input
到 Kendo ui 组合框对象并分配给新变量 _originalFunction
但不是使用这个变量,而是在下一行中再次使用这个链接对象,我真的不知道获取返回结果并将其分配给此
来自监听事件的匿名函数。
总的来说,我并不真正了解这个函数内部发生了什么以及返回值是什么。
有人可以用我能理解的方式解释一下吗?
(function ($) {
var _originalFunction = kendo.ui.ComboBox.fn._input;
kendo.ui.ComboBox.fn._input = function (e) {
var result = _originalFunction.call(this, e);
if (this.input) {
this.input.addClass('required');
}
return result;
}
})(jQuery);
最佳答案
这里发生的是,kendo 的 ComboBox
库中的 _input
得到了增强,以向输入元素添加一个 required
类。
如果您在赋值行中使用 _originalFunction
而不是 kendo.ui.ComboBox.fn._input
,那么您仅更改局部变量 的值_originalFunction
,不是kendo引用的函数
(function ($) {
var _originalFunction = kendo.ui.ComboBox.fn._input; // store the original function to a variable so that it can be called later
kendo.ui.ComboBox.fn._input = function (e) { // overwrite the _input function
var result = _originalFunction.call(this, e); // call the original function to apply default functionality
if (this.input) { // additional functionality is added here
this.input.addClass('required');
}
return result;
}
})(jQuery);
原始方法接受单个参数,因此当我们调用原始方法时,我们需要使用与预期相同的上下文和参数,这就是 _originalFunction.call(this, e )
。但它应该更好地编写为 _originalFunction.apply(this, argument)
因为它可以安全地防止该方法签名的任何 future 更改
关于jquery - 尝试理解这个代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17938550/