“this”不会返回选择器

时间:2014-02-08 13:37:26

标签: javascript oop object

我有一个简单的库来选择一个元素并返回元素的对象。

(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
阻止运行代码的问题是什么?

2 个答案:

答案 0 :(得分:2)

您无法将内容分配给this。抛出的错误取决于浏览器。

相反,您只需返回选择器:

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

    return selector;
};

这将覆盖用new调用的一般机制,即使你编写代码的方式也可以工作。看到你没有将这个函数用作构造函数,你也可以避免使用new:

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

答案 1 :(得分:0)

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

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

        return document.getElementById(parameter);
    };

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