jquery 不接受 属性,因为给定的字符串而不是对象

jquery don´t accept property, cause given string and not object

描述:

我尝试动态获取 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: {…} }

函数 select 对象:

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 objects 做,例如),让你陷入冲突。但至少如果你让它不可枚举,属性 将不会出现在 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" />