我正在尝试创建一个名为.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
有人能告诉我这是怎么做到的吗?
答案 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
来记录对象。