开发者问题收集

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

2015-04-03
9654

我不明白为什么我无法在下面的代码中获取“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('data-page'); 更改为 document.getElementById('js-currentPage').getAttribute 就可以了

请帮助我理解上述内容

谢谢

3个回答

如果您想重用 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);
    }
}
semirturgay
2015-04-03
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');
mohamedrias
2015-04-03

您的 init 函数位于 Deferjs 中,因此,当您使用“this”时,它指的是 Deferjs。Deferjs 没有名为 getAttribute 的函数。您需要使用

document.getElementById('js-currentPage').getAttribute(...)
Emre Türkiş
2015-04-03