offsetWidth
là một tài sản, và khi bạn làm
HTMLElement.prototype.offsetWidth
thực sự gọi hàm get
, vì vậy khi bạn thử nếu trên nguyên mẫu - bạn gặp lỗi.
Vì vậy, bạn không thể chỉ định thuộc tính, thay vào đó bạn có thể get descriptor for this property với tất cả các cài đặt và sau đó define property với bộ mô tả này, nhưng với tên bạn muốn.
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>
và sau đó bạn có thể gọi w
tài sản mới trên phần tử html hiện có.
CẬP NHẬT cho nhận xét của bạn.
Nếu bạn muốn thêm hàm vào đối tượng và gọi hàm đó mà không cần ()
, bạn nên xác định thuộc tính với getter.
Đối với thông tin thêm về các thuộc tính với mẫu nhìn thấy trong 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>
bạn có thể nhận [ 'Object.getOwnPropertyDescriptor()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Tham chiếu/Global_Objects/Object/getOwnPropertyDescriptor) và sau đó thêm ['Object.defineProperty()'] (https://developer.mozilla.org/en-US/docs/Web/ JavaScript/Tham chiếu/Global_Objects/Object/defineProperty) với tên bạn muốn – Grundy
@MarkC. 'HTMLElement.offsetWidth' là _undefined_ – Grundy
@Grundy Hoàn toàn chính xác, tôi đã hiểu sai điều gì đó. Cảm ơn bạn đã sửa tôi –