这是我第一个可以正常工作的示例:
const testObj = {
func: (str)=> { console.log(str) }
}
const testVar = testObj.func;
testVar("Working"); //logs "Working"
但是,如果我使用push函数尝试相同的操作,则未定义。
const array = [];
const testVar = array.push;
console.log(testVar); // function push() { [native code]}
testVar("Should Be added"); // TypeError: undefined is not an object (evaluating 'testVar("Should Be added")')
这是为什么?
答案 0 :(得分:1)
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class RequestDTO {
String type;
String param;
String requestId;
String screenName;
}
需要知道在调用时{"param":"a","type":"b","requestId":"c","screenName":"S - Name for ref"}
是什么,以便知道它要推送到什么内容—通常这就是您调用它的数组。如果将函数与数组分开,则会丢失该绑定,因为push
是通过调用函数的方式设置的。您可以使用call()
明确地将其放回去:
this
this
答案 1 :(得分:1)
制作var push = [].push
时;
您引用了从数组类型中使用this
的数组类型中的效用函数推送,因此当您制作此push('data')
它会给您Cannot convert undefined or null to object
,因为其中的this
现在是null|undefined
因此,如果您要进行这项工作,则必须像使用call
,'apply'或bind
/* call example */
var a = []
var push = a.push;
push.call(a, 'first elm')
/* apply example */
var a = [];
var push = a.push;
push.apply(a, ['first elm']);
/* bind example */
// Note: Bind doesn't execute the function but
// it returns a new function with new context on it
var a = [];
var push = a.push;
var aBindPush = push.bind(a);
push('first elm');