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" />
描述:
我尝试动态获取 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" />