Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript document.getElementsByTagName的本地副本_Javascript_Getelementsbyname - Fatal编程技术网

Javascript document.getElementsByTagName的本地副本

Javascript document.getElementsByTagName的本地副本,javascript,getelementsbyname,Javascript,Getelementsbyname,为什么下面的代码不起作用 var f = document.getElementsByTagName; var x = f('div'); 我在Chrome中看到“TypeError:非法调用”,在Safari中看到“TypeError:类型错误”。我在Firefox中没有发现错误,但它不起作用。我还没有在IE或Opera中进行测试 试试这个: function f(divName){ return document.getElementById(divName); } var x =

为什么下面的代码不起作用

var f = document.getElementsByTagName;
var x = f('div');
我在Chrome中看到“TypeError:非法调用”,在Safari中看到“TypeError:类型错误”。我在Firefox中没有发现错误,但它不起作用。我还没有在IE或Opera中进行测试

试试这个:

function f(divName){
  return document.getElementById(divName);
}

var x = f('div');   
您正试图使用括号调用函数。问题是代码中的“f”是一个变量,而不是一个函数

试试这个:

function f(divName){
  return document.getElementById(divName);
}

var x = f('div');   

您正试图使用括号调用函数。问题是代码中的“f”是一个变量,而不是一个函数

在Javascript中没有“绑定方法”(借用Python中的术语,我希望您已经知道,或者解释可能需要更长的时间)。当您获取对“document.getElementsByTagName”的引用时,您仅获取对函数的引用,而不是与document对象关联的方法。当您调用它时,“this”设置为窗口,而不是文档,因此它不起作用

从技术上讲,这样做会得到你想要的,但正如你可能看到的那样,这是毫无意义的:

var x = f.call(document, 'div')

(这是毫无意义的,因为它的可读性较差,速度不如调用document.getElementsByTagName()。使用闭包也同样毫无意义。)

在Javascript中没有“绑定方法”(借用Python中的术语,我希望您已经知道,或者解释可能需要更长时间)。当您获取对“document.getElementsByTagName”的引用时,您仅获取对函数的引用,而不是与document对象关联的方法。当您调用它时,“this”设置为窗口,而不是文档,因此它不起作用

从技术上讲,这样做会得到你想要的,但正如你可能看到的那样,这是毫无意义的:

var x = f.call(document, 'div')

(这是毫无意义的,因为它的可读性较差,速度不如调用document.getElementsByTagName()。使用闭包也同样毫无意义。)

因为在javascript中,方法从调用它们的对象获取它们的
,调用存储在单独变量中的方法会使
this
成为全局上下文(或浏览器中的
window
)。这应该起作用:

var f function ()
{
    return document.getElementsByTagName.apply(
        document
      , arguments
    );
}
var x = f('div');

因为在javascript中,方法从调用它们的对象获取它们的
this
,调用存储在单独变量中的方法使
this
成为全局上下文(或浏览器中的
窗口
)。这应该起作用:

var f function ()
{
    return document.getElementsByTagName.apply(
        document
      , arguments
    );
}
var x = f('div');

原因是需要对对象调用getElementsByTagName。您可以说,在函数定义中,它使用
this
来确定在哪个元素中查找标记。当您复制函数并调用它时,它将被赋予一个新的作用域,这意味着
this
没有指向其他对象。要在文档上调用函数,请尝试以下操作:

var f = document.getElementsByTagName;
var x = f.call(document, "pre");
alert(x[0]);

原因是需要对对象调用getElementsByTagName。您可以说,在函数定义中,它使用
this
来确定在哪个元素中查找标记。当您复制函数并调用它时,它将被赋予一个新的作用域,这意味着
this
没有指向其他对象。要在文档上调用函数,请尝试以下操作:

var f = document.getElementsByTagName;
var x = f.call(document, "pre");
alert(x[0]);

接下来的问题应该是,为什么
document.getElementsByTagName.call(document,'div')
不能在IE中工作?哪个IE?它在IE8中工作得很好。@Peter Hansen:IE8可能重复的后续问题应该是:
document.getElementsByTagName.call(document,'div')
在IE中工作吗?哪个IE?它在IE8中工作得很好。@Peter Hansen:IE8的可能副本您可以在不应用
的情况下执行此操作,原因有二:1
getElementsByTagName
只接收一个参数2。由于您在
文档
对象上调用函数,上下文将被隐式设置,因此没有理由使用apply再次设置该函数。您可以在不使用
apply
的情况下执行此操作,原因有二:1
getElementsByTagName
只接收一个参数2。由于您是在
文档
对象上调用函数,因此上下文将被隐式设置,因此没有理由使用apply.再次设置它。谢谢,这很有道理。谢谢