2014-02-08 83 views
1

我有一个简单的库来选择一个元素并返回元素的对象。“this”不返回选择器

(function() { 
    var $ = function(parameter) { 
     return new js(parameter); 
    }; 

    var js = function(parameter) { 
     var selector; 
     selector = document.getElementById(parameter); 
     this = selector; // assign selector to this. 

     return this; 
    }; 

    // Extend the library. 
    $.fn = js.prototype = { 
     hide: function() { 
      this.style.display = 'none'; 
      return this; 
     } 
    }; 

    if (!window.$) { 
     window.$ = $; 
    } 
})(); 

当我使用它。

HTML

<div id="box"> Hello world! </div> 

的Javascript

$('box').innerHTML = "Good"; 

注:我想做这样的create a simple JavaScript library
什么是防止运行代码的问题?

+3

您不能为'this'分配任何内容。 – basilikum

+0

@basilikum:'this = selector;'。 –

+0

是的,这正是你无法做到的。看到Tibos的答案。 – basilikum

回答

2

你不能指定东西到this。抛出的错误取决于浏览器。

相反,你可以简单地返回选择:

var js = function(parameter) { 
    var selector; 
    selector = document.getElementById(parameter); 

    return selector; 
}; 

这将覆盖新调用的通用机制,并随你怎么写的代码甚至工作。看到你如何不使用功能作为一个构造函数,你也可以尽量避免使用新:

var $ = function(parameter) { 
    return js(parameter); 
}; 
+0

'错误:无法分配给'this''在执行时并不是很安静......虽然这不是语法错误。 – Bergi

+0

你也可以避免整个函数表达式='var $ = js'。 – Bergi

+0

@Bergi谢谢,我修复了失败的提示。至于其他的建议,我会假设有更多的代码,否则OP可能完全没有'var js'。 – Tibos

0

您分配选择器this,这是无效的,而你正在创建你不是一个对象需要。您的代码可以简化为:

(function() { 
    var $ = function(parameter) { 

     return document.getElementById(parameter); 
    }; 

    if (!window.$) { 
     window.$ = $; 
    } 
})(); 
+0

由于我们正在剪切OP的代码段,所以也许我们可以优化它到这一行:'window。$ = window。 document.getElementById.bind(document);' – Tibos

+0

不错!我喜欢简洁...改善你的答案 –