问题描述
|
var returned = values.make(function (value,index) {
return items[index].value = value;
});
我有上面的片段。
值是要分配给不同元素的值的数组。
Make本质上等效于Array.prototype.map。
Array.prototype.make = function (loop,playground) {
var loop = loop || function (value) { return value },playground = playground || this;
if (loop.Type !== \"Function\") throw \"Loop [0] is not a function.\";
var returned = [];
for (var i = 0; i < this.length; i++)
returned[i] = loop.apply(playground,[this[i],i,this]);
return returned;
};
另外,我在同一文件中有Function.prototype.Type = \"Function\";
,因此不是.Type
会引发错误。 .Type
效果很好。
除功能外,这些还具有.Type
\。
Object.prototype.Type = \"Object\";
Array.prototype.Type = \"Array\";
RegExp.prototype.Type = \"RegExp\";
String.prototype.Type = \"String\";
Number.prototype.Type = \"Number\";
Boolean.prototype.Type = \"Boolean\";
XMLHttpRequest.prototype.Type = \"XMLHttpRequest\";
Date.prototype.Type = \"Date\";
项目是不同元素的数组。
[<input type=\"text\" />,<input type=\"text\" />,<input type=\"text\" />]
我不断收到此错误。
Uncaught Error: NOT_SUPPORTED_ERR: DOM Exception 9 on line 3
我收到该错误,它没有任何意义,因为该行上没有任何代码。
我全亏了。
有人注意到该代码有什么问题吗?
更新:我不知道发生了什么,但我已解决。
由于没有人给出正确的答案,因此,我只会将其提供给唯一尝试过的人。
*拍手拍手拍手*
解决方法
您可以张贴一个重现此错误的小例子吗?
除此之外,您的Javascript中还有一些错误:
我在这里添加了分号:
var loop = loop || function (value) { return value; },playground = playground || this;
尽管不需要分号,但我还是喜欢使用分号,因为否则您可能会被细微的错误所困扰。
并且,您需要使用typeof
而不是.Type
:
if (typeof loop !== \"function\") throw \"Loop [0] is not a function.\";
另外,如果items
只是一个字符串数组,那么items[index].value
就没有意义,因为字符串没有value
属性。这部分对我来说尤其可疑。尽管我没有得到与我留下的错误相同的错误,但我认为值得仔细检查。
您提到您正在使用第三方库,因此有关typeof
的部分并不重要。您还提到过您在数组中使用了实际的input
元素,因此第二部分也不重要。
我再次尝试了您的代码,这次用document.createElement
创建了input
元素:
Array.prototype.make = function (loop,playground) {
var loop = loop || function (value) { return value; },playground = playground || this;
if (typeof loop !== \"function\") throw \"Loop [0] is not a function.\";
var returned = [];
for (var i = 0; i < this.length; i++)
returned[i] = loop.apply(playground,[this[i],i,this]);
return returned;
};
var items = [];
items.push(document.createElement(\"INPUT\"));
items.push(document.createElement(\"INPUT\"));
items.push(document.createElement(\"INPUT\"));
var values = [4,5,6];
var returned = values.make(function (value,index) {
return items[index].value = value;
});
console.log(items[0].value,items[1].value,items[2].value);
//firebug shows: 4 5 6
因此,看来您的代码本身正在工作。您可以在新页面上单独尝试此代码吗?这样,您可以验证原始页面上是否有与您的代码交互并导致此错误的东西。
,我在不同的场景中遇到了同样的问题,但是使用最新版本的Prototype(1.7代替1.5)修复了它。