通过快捷方式引用Javascript对象
javascript object reference by shortcuts
我有非常非常宝贵的,所以我试着做这样的快捷方式:
实例: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");
}
- )文档不是字符串
- )文档("getElementByTagName")。调用(div),
- )
.
访问器更改为括号,因为oc是字符串而不是属性 - )你曾经两次使用
var d
- )它是
getElementsByTagName
,复数元素
全字符串疯狂http://jsfiddle.net/nqeUN/8/
"document"["gg"]()["getElementsByTagName"]("div")["0"]["onclick"] = function(){alert(1);};
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值