【问题标题】:Why does assigning a function (which belongs to an object) to a variable behave this way? [duplicate]为什么将函数(属于对象)分配给变量会以这种方式表现? [复制]
【发布时间】:2018-02-26 22:18:44
【问题描述】:

我有这个网页,我必须使用很多 document.getElementById's。由于我很懒,我想通过将document.getElementById 分配给一个较短的变量来节省几个字节:

var geid = document.getElementById;

但是,这并没有按我的预期工作。它给了我以下错误:

未捕获的类型错误:非法调用

考虑以下证明我的问题的 sn-p:

var foo = document.getElementById('foo');
console.log(foo); // outputs: '<div id="foo">Foo</div>'

var geid = document.getElementById;
var foo_geid = geid('foo'); // Aaaaaargh! Uncaught TypeError: Illegal invocation
console.log(foo_geid);
&lt;div id="foo"&gt;Foo&lt;/div&gt;

那我做错了什么?为什么我不能做我做过的事?

我检查了“How does the "this" keyword work?”,因为我有一种预感,this 必须与这一切有关。 (在我看来,getElementById 以某种方式从document 对象中分离)。但我无法真正查明和阐明问题。谁能帮帮我?

【问题讨论】:

标签: javascript object binding this


【解决方案1】:

你需要使用一个函数:

var d = function(id) 
{
    return document.getElementById(id);
}

然后你可以像这样使用它:

var el = d('someId');

【讨论】:

  • 我认为看到答案被低估是很常见的,因为他们回答了选民认为不好的问题。有点像对“当它是重复的并且应该关闭的时候,你为什么要回答这个糟糕的问题”的反对意见?
  • 也许吧。我认为那些人忘记了他们也曾经学习过,也许没有看到重复的问题。一些新人甚至不知道如何询问他们需要什么。不过,我宁愿帮助人们,也不愿成为精英派。
  • @musefan:请问这个问题怎么是一个的问题。复制?当然。但是不好? :)
  • @Krumia:我的意思是人们普遍反对有效答案的原因,而不仅仅是这个问题。我同意,这是一个写得很好的问题。
  • @Stuart:在那种情况下,你不会介意投反对票...
猜你喜欢
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多