1

在查看了自定义元素规范之后,我如何在没有先实例化自定义元素定义的情况下获得对它的引用并不是很明显(这可能是有问题的)。有没有办法直接引用自定义元素的原型?

更具体地说,如果我有:

var proto = Object.create(HTMLElement.prototype);
proto.createdCallback = function() { // some heavy operation };
document.registerElement('x-foo', {prototype: proto});

稍后,我很想引用原型,例如:

// wish
var XFoo = document.getElementDefinition('x-foo');

但相反,我想出的唯一方法是:

// reality
var XFoo = document.createElement('x-foo').__proto__;

这在尝试针对重型组件编写测试时尤其成问题 - 因为没有办法消除重型行为(XFoo.createdCallback = // stub;在实际调用原始方法之前使用类似的东西。

4

2 回答 2

0

没有办法消除沉重的行为

使用函数引用而不是匿名函数:

proto.createdCallback = model.foo;

定义它:

var model = {};
model.foo = function(){/*some heavy operation*/};

然后通过重新定义它来存根它:

var XModel = {};
XModel.foo = function(){/*stub*/};

并在测试中引用它:

XFoo.createdCallback = XModel.foo;

参考

于 2015-04-13T19:47:24.937 回答
0

如果您引用了自定义元素的构造函数,则可以使用它来访问原型。

var XFoo = document.registerElement('x-foo', {prototype: proto});
XFoo.prototype // this will give u access to the prototype object. 
于 2015-04-14T14:57:40.693 回答