jquery不接受属性,导致给定字符串而不是对象



描述:

我试图动态地获取HTML对象的值。所以我在Object上写了一个原型函数select。它可以在控制台上工作,但不能在脚本中工作。jquery属性对它不利。

错误:

Uncaught TypeError: can't assign to property "guid" on "innerText": not an object

相关对象的输出:

Object { 0: th, 1: th, 2: th, 3: th, 4: th, 5: th, length: 6, prevObject: {…} }

在对象上选择功能:

Object.prototype.select = function(what)
{
return this.map(function() {
return this[what];
}).get();
}

呼叫:

label.select('innerText')

这是一个已知的错误吗?有变通办法吗?调试器只是与jquery中的一点有关:

S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++)

已经做了一个变通方法:

function getData(data)
{
return $(data).map(function() {
return this.value;
}).get();
}

Object.prototype对象添加属性是个好主意。用这样的简单赋值来添加它们,这样它们就可以枚举,这是一个特别是的坏主意。此外,在查看select函数的内容时,请注意,实际上没有对象上有map方法。(数组是唯一具有map的内置对象。jQuery对象也具有它。(

我强烈建议不要在Object.prototype中添加任何内容。

但是,如果你无论如何都这样做,请使你添加的内容"不可枚举":

Object.defineProperty(Object.prototype, "select", {
value() {
// ...your code here
},
writable: true,
configurable: true,
});

这仍然不是一个好主意,因为库拥有自己的专用对象并不罕见,这些对象很可能有select方法(例如,jQuery对象(,会设置冲突。但至少如果使其不可枚举,则该属性不会显示在for-in循环和类似循环中。

如果这是一个特定于jQuery的用例,您可以创建一个jQuery插件函数。

类似于:

(($) => {
// $.fn is alias for $.prototype
$.fn.getArr = function(what) {
return this.map((i,el) => $(el)[what]()).get();
}
})(jQuery)
console.log($('p').getArr('text'))
console.log($('input').getArr('val'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Para 1</p>
<p>Para 2</p>
<input value="one" />
<input value="two" />

相关内容

  • 没有找到相关文章

最新更新