Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用prototype属性定义Javascript函数_Javascript - Fatal编程技术网

使用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
函数,将元素和类名作为参数会更安全。我同意。但值得理解的是,这是可能的,这样做确实有一定的简单性。但正如你所说,这很危险!