单击使用string.prototype

时间:2014-09-21 02:44:20

标签: javascript jquery

我正在尝试创建一个名为.Switch()的扩展方法,如下所示:

    String.prototype.Switch = function (p) {
        console.log(this); // should log $obj
    };

    var $obj = $("div");
    $("a", $obj).click(function (e) {
        $obj.Switch(0);
    });

HTML

 <div>
   <a href="#">Link</a>
 </div>

我收到了一个错误:Uncaught TypeError: undefined is not a function

有人能告诉我这是怎么做到的吗?

3 个答案:

答案 0 :(得分:2)

$obj是一个jQuery对象,而不是一个字符串。如果你想为它添加功能,你应该这样做:

jQuery.fn.Switch = function (p) {
     console.log(this); // should log $obj
};

答案 1 :(得分:0)

您得到的错误是因为您通过向原型添加Switch函数来扩展String对象。但是,调用Switch的函数是一个JQuery对象。 所以如果我们修改你的例子:

String.prototype.Switch = function (p) {
    console.log(p); // should log input
};

var testStr = 'hello'; // create a new instance of String Object

testStr.Switch(5); // will log 5

所以类似地,如果在JQuery对象的原型上声明函数,您将能够从JQuery对象的所有实例调用该函数。

答案 2 :(得分:0)

var $obj = $("div");是一个jQuery对象。您可以var $obj = $("div").text();使用字符串而不是对象调用Switch

您需要$.prototype.Switch来记录对象。