我无法弄清楚为什么我无法在下面的代码中获得'this'的属性:
var Deferjs = {
init: function(){
if(document.getElementById('js-currentPage')!=null){
var file = this.getAttribute('data-page');
Deferjs.LoadJs(file);
}
},
LoadJs:function(file){
alert("ok");
}
}
Deferjs.init();
但是如果我改变了 this.getAttribute( '数据页'); to document.getElementById('js-currentPage')。getAttribute it works
请帮我理解上面的
THX
答案 0 :(得分:2)
如果要重用document.getElementById('js-currentPage')
将其保存在变量中。您无法在案例中this
引用它this
指向容器对象(DeferJs
)
init: function(){
var elem=document.getElementById('js-currentPage');
if(elem!=null){
var file = elem.getAttribute('data-page');
Deferjs.LoadJs(file);
}
}
答案 1 :(得分:1)
if(document.getElementById('js-currentPage')!=null){
var file = this.getAttribute('data-page');
此处this
将引用Deferjs
。相反,如果要在其他地方访问它,则必须将对DOM的引用存储到变量。
var ele = document.getElementById('js-currentPage');
if(ele!=null){
var file = ele.getAttribute('data-page');
答案 2 :(得分:0)
你的init函数驻留在Deferjs中,因此,当你使用“this”时,它指的是Deferjs。 Deferjs没有名为getAttribute的函数。你需要使用
document.getElementById('js-currentPage').getAttribute(...)
答案 3 :(得分:0)
DOM 实际上提供了一组 API 来访问HTML元素,并且此指针指向范围的对象,只能访问属性 类,ID,样式 等。
在对象范围内,即,您可以通过对象属性( this.data-message )访问。但是,对象范围内没有 没有getAttribute()方法 ,因此您不能使用 this.getAttribute()。