是否可以别名,例如HTMLElement.offsetWidth属性,就像我可以使用
等方法一样EventTarget.prototype.on = EventTarget.prototype.addEventListener
我试过了:
HTMLElement.prototype.w = HTMLElement.prototype.offsetWidth
但得到了:
TypeError:'offsetWidth'getter在没有的对象上调用 实现接口HTMLElement。
答案 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>