在JS中直接调用方法是可以的,但不能使用.call或.apply

问题描述 投票:0回答:1

我有一个由调用产生的节点

let node = document.getElementById('myID');

node是一个Node,它有一个classList对象,该对象有一个remove()方法

这对我有用:

node.classList.remove('alert');

但是,这不起作用:

let method = node['classList']['remove'];
method.call(node, ['myclass']);

我在第二种情况下收到错误:

Uncaught TypeError: 'remove' called on an object that does not implement interface DOMTokenList.

我做错了什么?

javascript methods call
1个回答
0
投票

您的

method
引用 DOMTokenList 原型中的
remove
函数(即:来自
node.classList
),因此它期望其上下文(即:
this
值)是 DOMTokenList (
node.classLIst
),而不是只是
node
:

let method = node['classList']['remove'];
method.call(node.classList, 'myclass');

另请注意,在这种情况下,将数组作为第二个参数传递给

.call()
将充当
node.classList.remove(['myClass'])
,因此您需要使用
.apply()
(如果您想传递代表您的参数的数组),或者删除本例中的数组。

© www.soinside.com 2019 - 2024. All rights reserved.