通过快捷方式引用Javascript对象

javascript object reference by shortcuts

本文关键字:Javascript 对象 引用 快捷方式      更新时间:2023-09-26

我有非常非常宝贵的,所以我试着做这样的快捷方式:

实例:http://jsfiddle.net/nqeUN/

var d = "document" ,
    t = "getElementByTagName" ,
    d = "div" ,
    oc = "onclick";
d[t](d)[0].oc = function(){
    alert("1");
}

但它不工作,是什么原因?我可以看到在Google + api中,所有的对象都是这样定义的,作为字符串,他们是如何使它工作的?

有几个问题需要解决

  • d有两个绑定值:"document""div"
  • 这是getElement s ByTagName
  • getElementsByTagName函数需要一个DOM入口点,而不是字符串。将第一个d切换到document
  • .oc使用点符号时,它将绑定到属性oc而不是变量oc的值。使用[]符号代替
代码:

var d = document ,
    t = "getElementsByTagName" ,
    div = "div" ,
    oc = "onclick";
d[t](div)[0][oc] = function(){
    alert("1");
}

工作小提琴:http://jsfiddle.net/nqeUN/1/

字符串可以用于属性,但不能用于变量名。您还定义了两次d,并且使用了错误的方法名。你可以这样做:

var d = 'document', t = 'getElementsByTagName', div = 'div', oc = 'onclick';
window[d][t](div)[0][oc] = function() { ... }

但是这确实降低了可读性,并且是不必要的。您可以通过最小化器运行代码以自动获得此值,并且仍然保持可读的开发代码。

d是字符串,而不是document

你应该写var d = document来获得实际的document对象。


然而,你不应该自己这样做;它使得完全是不可读的代码。

相反,你应该开发正常的,可读的Javascript,然后使用一个minifier(如Microsoft AjaxMin或Google Closure Compiler)在生产环境中尽可能地自动收缩你的代码。

如果替换示例中的值,您将看到:

"document".getElementsByTagName("document").onclick = function() {};

1)。d应该设置为全局文档引用,而不是字符串'document'

var d = window.document;

2)。getElementsByTagName返回与给定DOM节点中包含的给定标记名匹配的节点,因此将'document'作为字符串传递将查找名为'document'的HTML元素。您需要找到div,例如:

d.getElementsByTagName("div"); // All the 'div' elements in the document

3)。对于作为字符串使用的方法名,它们需要放在方括号

document[ t ]; // document.t won't work, t is not a member

4)。一旦访问了所关心的节点,就需要循环遍历它们,为每个元素添加事件处理程序

var d = document.getElementsByTagName("div"),
    i = 0,
    len = d.length;
for ( ; i < len; i++ ) {
    (function() {
        // do something with d[i], the current element in the loop
    })(i)
}

希望有帮助!欢呼。

因为变量d是字符串;并且String对象没有getElementByTagName方法。

此外,您的d变量被重新声明为字符串div;所以你需要给它赋一个不同的名字:

var d = "document" ,
    t = "getElementByTagName" ,
    e = "div" ,
    oc = "onclick";

然后,您需要访问window对象,并检索它的document属性:

window[d]

检索Document元素,然后从中检索getElementsByTagName方法(read getElements not getElement)

window[d][t]

然后调用它并将元素的名称传递给它,检索返回数组的第一个值,并为其onclick属性分配一个函数:

window[d][t](e)[0][oc] = function () {
    alert("1");
};
var d = "document",
    t = "getElementsByTagName" ,
    div = "div" ,
    oc = "onclick";
window[d][t](div)[0][oc] = function(){
    alert("1");
}
  1. )文档不是字符串
  2. )文档("getElementByTagName")。调用(div),
  3. ) .访问器更改为括号,因为oc是字符串而不是属性
  4. )你曾经两次使用var d
  5. )它是getElementsByTagName,复数元素

全字符串疯狂http://jsfiddle.net/nqeUN/8/

"document"["gg"]()["getElementsByTagName"]("div")["0"]["onclick"] = function(){alert(1);};