使用prototype属性定义Javascript函数
这段代码怎么了使用prototype属性定义Javascript函数,javascript,Javascript,这段代码怎么了 (function (){ 'use strict'; // add hasClass function String.prototype.hasClass = function (className) { return this.className.search('(\\s|^)' + className + '(\\s|$)') != -1 ? true : false; }; console.log(document.ge
(function (){
'use strict';
// add hasClass function
String.prototype.hasClass = function (className) {
return this.className.search('(\\s|^)' + className + '(\\s|$)') != -1 ? true : false;
};
console.log(document.getElementById('link').hasClass('test'));
})();
我希望它返回true
或false
,但我得到的只是
TypeError: document.getElementById("link").hasClass is not a function**
UPD:谢谢大家。现在我明白了。我应该将方法设置为对象或元素(更正确的是什么?)而不是字符串 据我所知,
hasClass
不是Element
的方法,您可能会想到jQuery方法,因此您必须使用jQuery并使用jQuery选择器选择元素。其他框架也可能有这样的方法,我相信YUI也有。据我所知,hasClass
不是Element
的方法,您可能会想到jQuery方法,因为您必须使用jQuery并使用jQuery选择器选择元素。其他框架也可能有这样的方法,我相信YUI也有。document.getElementById('link')不返回字符串,而是返回DOM元素。您可以尝试以下方法:-
Element.prototype.hasClass = function (className) {
return this.className.search('(\\s|^)' + className + '(\\s|$)') != -1 ? true : false;
};
console.log(document.getElementById('link').hasClass('test'));
getElementById('link')不返回字符串,而是返回DOM元素。您可以尝试以下方法:-
Element.prototype.hasClass = function (className) {
return this.className.search('(\\s|^)' + className + '(\\s|$)') != -1 ? true : false;
};
console.log(document.getElementById('link').hasClass('test'));
方法是编写一个接收DOM元素的函数,因为String对象与它无关;) 一个简单的例子:
function hasClass(element, classcheck){
return element.className.indexOf(classcheck) !== -1;
}
因此,您的代码如下所示:
(function (){
'use strict';
// add hasClass function
function hasClass(element, classcheck){
return element && element.className && element.className.indexOf(classcheck) !== -1;
}
console.log(hasClass(document.body,'test'));
})();
显然,您应该检查第一个参数是否也是一个DOM元素(有很多不同的方法可以实现这一点),但这是正确的方法。方法是编写一个函数来接收DOM元素,因为String对象与它无关;) 一个简单的例子:
function hasClass(element, classcheck){
return element.className.indexOf(classcheck) !== -1;
}
因此,您的代码如下所示:
(function (){
'use strict';
// add hasClass function
function hasClass(element, classcheck){
return element && element.className && element.className.indexOf(classcheck) !== -1;
}
console.log(hasClass(document.body,'test'));
})();
显然,您应该检查第一个参数是否也是一个DOM元素(实现这一点的方法有很多种),但这是正确的方法。您正在尝试“扩展”字符串,但尝试将该方法应用于DOM元素?您已将hasClass添加到字符串,而不是添加到您试图“扩展”的类型元素String,但尝试将该方法应用于DOM元素?您已将hasClass添加到String,而不是类型ElementI。我不建议将DOM类的原型弄乱。这是一种非常糟糕的做法,可能会使您的JS与其他JS库不兼容,等等。制作自己的
hasClass
函数,将元素和类名作为参数会更安全。我同意。但值得理解的是,这是可能的,这样做确实有一定的简单性。但正如你所说,这很危险!我不建议弄乱DOM类的原型。这是一种非常糟糕的做法,可能会使您的JS与其他JS库不兼容,等等。制作自己的hasClass
函数,将元素和类名作为参数会更安全。我同意。但值得理解的是,这是可能的,这样做确实有一定的简单性。但正如你所说,这很危险!