我想在服务器端javascript中使用一些功能。我认为原型正在检查浏览器类型,但当然node.js不是浏览器。我收到以下错误:
$ node
> require('./prototype') ;
ReferenceError: navigator is not defined
at /home/guest/projects/javascript/prototype.js:14:5
at Object.<anonymous> (/home/guest/projects/javascript/prototype.js:23:4)
at Module._compile (node.js:462:23)
at Module._loadScriptSync (node.js:469:10)
at Module.loadSync (node.js:338:12)
at loadModule (node.js:283:14)
at require (node.js:411:14)
at cwdRequire (repl:29:10)
at [object Context]:1:1
at Interface.<anonymous> (repl:96:19)
prototype.js是版本1.7,node.js是版本0.2.6
答案 0 :(得分:6)
Prototype被编写为模块化。这意味着您可以只使用扩展Array和Class和Function的有用部分(我喜欢这些位!)并省略处理浏览器和DOM的部分(IE中缓慢且节点中不存在的位)。
首先转到https://github.com/sstephenson/prototype,然后从src/prototype/
和src/prototype/lang/
中选择所需的部分。
祝你在这样一个充满挑战的挑战中好运。
答案 1 :(得分:4)
迟到的答案,但我确信它对某些人仍然有用:
https://github.com/Rixius/prototype.node.js
几天前,我自己做了类似的事情,并意识到它已经完成了...... 即使使用github搜索,也很难找到这个回购。
答案 2 :(得分:2)
如果您查看Prototype.js的源代码,它会严格绑定到浏览器环境,而该环境不是由节点提供的(因为它不是Web浏览器)。
jsdom尝试模拟浏览器环境,并已习惯successfully在服务器端运行JQuery。您的里程可能会有所不同。
答案 3 :(得分:0)
underscore.js 尤其适用于node.js,它实现了大多数Prototypes心爱的功能:
Underscore is a utility-belt library for JavaScript that provides a lot of
the functional programming support that you would expect in Prototype.js.
它作为Prototype本身更快,因为不会扩展任何内置的JavaScript对象。
因此,语法略有不同:
// prototype.js:
anArray.each(function(){ ... });
// underscore.js:
_ = require('underscore');
_.each(anArray, function(){ ... });
如果您正在寻找像String
这样的原型trim
函数,请查看 underscore.string