我使用的是"html5“node.js库,基于"jsdom”库(https://github.com/aredridel/html5)。
我的代码是:
var HTML5 = require('/usr/lib/node_modules/html5/lib/html5'),
Script = process.binding('evals').Script,
util = require('util'),
fs = require('fs');
var p = new HTML5.Parser();
p.parse_fragment(fs.readFileSync('test.xml'));现在我有了p对象,它有p.tree.body_pointer._childNodes of NodeList (尝试p.tree.body_pointer._childNodes.constructor查看)。
我想通过我的方法来扩展它,以便能够调用p.tree.body_pointer._childNodes.foo()。
我尝试了NodeList.prototype.foo = function(){返回"OK"},但是NodeList没有定义错误消息。
我想NodeList是在我找不到的东西里面声明的。在源代码中,我发现它是在core或dom下找到的,但这两种代码在我的代码中都不可用。
我还扫描了HTML5对象,但没有成功。
有什么想法吗?
发布于 2022-07-29 07:24:15
我讨厌碰到一个旧的线程,然而,当我搜索如何扩展NodeList原型时,这是我在谷歌上的第一个搜索结果。
您可以使用Object.defineProperty为原型分配任何值或函数。
示例:
Object.defineProperty(NodeList.prototype, 'foo', {
value: function() {
// Return the lenght of the current NodeList
return this.length;
},
enumerable: false,
configurable: false,
});发布于 2013-03-07 17:38:09
我能想到三种解决方案:
// either ...
var NodeList = p.tree.body_pointer._childNodes.constructor;
// ...or...
var core = require('html5/node_modules/jsdom/lib/jsdom/level3/core');
var NodeList = core.dom.level3.core.NodeList;
// ...or...
var jsdom = require('html5/node_modules/jsdom');
var NodeList = jsdom.dom.level3.core.NodeList;
// ...and then...
NodeList.prototype.foo = function() { ... };不过,这三个人都不是很漂亮。
https://stackoverflow.com/questions/15276942
复制相似问题