在jstree插件中有一个这样的函数:
this.check_node = function (obj, e) {
if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); }
// Removed code for readability
};
因此对于check_node
我必须传递一个参数列表,我必须传递的参数列表在一个数组中,所以我这样做:
scope.jstree(true).check_node(...scope.args['check_node']);
scope.args['check_node']
包含我要传递给check_node
的args列表,使用spread运算符执行此操作不会引发任何错误,但由于某种原因我无法使用ES6语法和我坚持使用ES5,所以我不得不使用apply
代替:
scope.jstree(true).check_node.apply(null, scope.args['check_node']);
但这会引发以下错误:
TypeError: Cannot read property 'settings' of null
就在这一行:
if(this.settings.checkbox.tie_selection)
为什么在这种情况下应用抛出错误并且传播操作符不是?我该如何解决这个问题?
答案 0 :(得分:0)
好吧,在您的ES5代码中,您明确传递了null
thisArg
,因此this
在被调用函数中是null
。这里不足为奇。
扩展运算符只是以一种方式扩展数组,例如,如果你自己传递了它的值。
答案 1 :(得分:0)
因为您通过传递this
作为第一个参数,明确说出“在函数调用null
期间生成null
”。
您需要将您想要的值this
作为第一个参数传递。
我不熟悉您的图书馆,但这样做会:
var obj = scope.jstree(true);
obj.check_node.apply(obj, scope.args['check_node']);
如果jstree
返回scope
,您可以避免变量:
scope.jstree(true).check_node.apply(scope, scope.args['check_node']);
答案 2 :(得分:0)
因为你要将check_node改为null。应用的第一个参数是对象/上下文,它应该对你调用的函数起作用。