TypeError:this.getAttribute不是函数--javascript

时间:2015-04-03 10:51:59

标签: javascript

我无法弄清楚为什么我无法在下面的代码中获得'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

4 个答案:

答案 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()。