别名接口属性

时间:2015-11-03 19:28:53

标签: javascript

是否可以别名,例如HTMLElement.offsetWidth属性,就像我可以使用

等方法一样
EventTarget.prototype.on = EventTarget.prototype.addEventListener

我试过了:

 HTMLElement.prototype.w = HTMLElement.prototype.offsetWidth

但得到了:

  

TypeError:'offsetWidth'getter在没有的对象上调用   实现接口HTMLElement。

1 个答案:

答案 0 :(得分:8)

offsetWidth是一个属性,当你做

HTMLElement.prototype.offsetWidth 

真正调用get函数,因此当您尝试使用原型时 - 会出现错误。

所以你不能分配属性,而是可以get descriptor for this property使用所有设置,然后define property使用此描述符,但使用您想要的名称。

var descriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "offsetWidth");
Object.defineProperty(HTMLElement.prototype, "w", descriptor);

var p = document.getElementById('p');

console.log('offsetwidth=%i, w=%i',p.offsetWidth,p.w);
<p id='p'>123</p>

然后你可以在现有的HTMLElement上调用新的w属性。

您的评论

更新

如果你想在没有()的情况下向对象添加函数并调用它,你应该用 getter 定义属性。

有关带样本的属性的详细信息,请参阅doc:MDN : Object.defineProperty()

Object.defineProperty(HTMLElement.prototype, "x", {
  get: function() { return this.getBoundingClientRect().left }
});

var p = document.getElementById('p');

console.log('left=%i, x=%i',p.getBoundingClientRect().left,p.x);
<p id='p'>123</p>