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完美无缺.
与Function一起,这些也有.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";
Items是不同元素的数组.
[
我一直收到这个错误.
Uncaught Error: NOT_SUPPORTED_ERR: DOM Exception 9 on line 3
我完全失去了.
有没有人注意到该代码有什么问题?
更新:我不知道发生了什么,但我修好了.
由于没有人给出正确的答案,我只会把它交给唯一尝试过的人.
拍手拍手*
最佳答案
你能发布一个重现这个错误的小例子吗?
除此之外,您的Javascript中存在一些错误:
我在这里添加了一个分号:
var loop = loop || function (value) { return value; },playground = playground || this;
虽然没有必要使用分号,但我喜欢使用分号,否则你可能被微妙的错误所困扰.
并且,您需要使用typeof not .Type:
if (typeof loop !== "function") throw "Loop [0] is not a function.";
此外,如果items只是一个字符串数组,那么items [index] .value没有意义,因为字符串没有value属性.这部分对我来说特别可疑.虽然我没有得到你离开那一点时所做的同样的错误,但我认为值得仔细研究.
您提到您正在使用第三方库,因此有关typeof的部分无关紧要.您还提到您在数组中使用实际的输入元素,因此第二部分也无关紧要.
我再次尝试了你的代码,这次用document.createElement创建输入元素:
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]);
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
所以看起来你的代码本身就是可行的.您可以在新页面上单独尝试此代码吗?这样,您可以验证原始页面上是否存在与您的代码交互并导致此错误的内容.