1

如果我在没有原型框架的情况下使用此代码:

if (XMLHttpRequest.prototype.sendAsBinary) return;
        XMLHttpRequest.prototype.sendAsBinary = function(datastr) {
            function byteValue(x) {
                return x.charCodeAt(0) & 0xff;
            }
            console.log(Array.prototype.map);
            var ords = Array.prototype.map.call(datastr, byteValue);
            var ui8a = new Uint8Array(ords);
            this.send(ui8a.buffer);
        }

日志返回:

function map() { [native code] } 

如果包含原型 js 框架,则日志将返回以下内容:

function collect(iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];
    this.each(function(value, index) {
      results.push(iterator.call(context, value, index));
    });
    return results;
  } 

同时我得到一个错误:

Uncaught TypeError: Object [object String] has no method 'each' prototype.js:864
collect prototype.js:864
XMLHttpRequest.sendAsBinary jquery.filedrop.js:309
send jquery.filedrop.js:215

无论如何,jQuery 也在使用。

jQuery.noConflict();

如果原型框架打开,为什么我无法运行本机地图功能?

4

1 回答 1

3

当你包含prototypejs时,Array.prototype.map被prototypejs方法替换。新方法假定它将始终在数组上调用,这会导致您的用例失败,因为您是在字符串上调用它。

一种解决方法是将字符串转换为数组。

var ords = Array.prototype.map.call(datastr.splt(""), byteValue);

然后可以简化为:

var ords = datastr.splt("").map(byteValue);
于 2013-11-14T20:45:31.510 回答