ES6在扩展HTMLButtonElement时无法使用本机setter
ES6 Unable to use native setters when extending HTMLButtonElement
我正试图弄清楚如何将本地setter和getter用于扩展的HTMLButtonElement。特别是"disabled"属性。
此处列出了该房产:https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement
示例代码如下:http://codepen.io/anon/pen/RWmKaw?editors=001
从上面的链接粘贴的代码块:
'use strict';
class TestButton extends HTMLButtonElement {
attachedCallback() {
this.appendChild(document.createTextNode('test'));
this.addEventListener('click', (event) => {
this.customFun();
});
}
customFun() {
alert('setting myself as disabled.');
this.disabled = true;
}
}
document.registerElement('test-button', TestButton);
document.body.appendChild(document.createElement('test-button'));
当我在设置或获取时访问禁用的属性时,我收到以下错误:
Uncaught TypeError: Illegal invocation(anonymous function) @ pen.js:33
我可以覆盖TestButton的setter和getter,但这并不能解决问题,只是解决了症状。
我还尝试使用以下语法:代码笔:http://codepen.io/anon/pen/NGVddj?editors=001
'use strict';
class TestButton {
attachedCallback() {
this.appendChild(document.createTextNode('test'));
this.addEventListener('click', (event) => {
this.customFun();
});
}
customFun() {
alert('setting myself as disabled.');
this.disabled = true;
}
}
document.registerElement('test-button', {prototype:TestButton, extends:'button'});
let myButton = document.createElement('button', 'test-button');
myButton.setAttribute('is', 'test-button');
myButton.customFun();
document.body.appendChild(myButton);
这只会导致我的自定义元素功能被剥离,我收到一个错误:
Uncaught TypeError: myButton.customFun is not a function
好的,我解决了:
'use strict';
class TestButton extends HTMLButtonElement {
attachedCallback() {
this.addEventListener('click', (event) => {
this.customFun();
});
}
customFun() {
alert('setting myself as disabled.');
this.disabled = true;
}
}
document.registerElement('test-button', {
prototype: TestButton.prototype,
extends: 'button'
});
let myButton = document.createElement('button', 'test-button');
document.body.appendChild(myButton);
诀窍仍然是扩展HTMLButtonElement以获得继承父级属性的能力,但随后在寄存器中,使用TestButton.protype,并结合创建元素语法扩展语法修复它。
此外,删除"is"解决了这个问题。
相关文章:
- '图片'没有用于本机道具的propType'RCTImageView.overlayColor&
- 在iOS和Android上使用React native时,我还能使用本机第三方lirbraries吗
- javascript函数访问ios本机功能
- 如何在从客户端接收数据时从本机方法触发javascript函数?
- 在浏览器中检测本机或第三方PDF插件
- 将事件发送到javascript文档的react本机模块是否正确
- 将对应用内购买的支持构建为react本机代码
- 如何在Windows上用javascript构建本机应用程序
- 在视图中渲染多个按钮以编程方式进行本机反应
- 在本机挂钩之前加载可安装挂钩
- 如何使用UI Automation JavaScript Reference for iOS appium获取本机应用程
- 控制台中的“function floor(){[本机代码]}”是什么
- 如何将chrome.tabCapture流从js传递到c++PNACL本机代码
- WKWebview-Javascript和;本机代码
- 将回调/函数从本机发送到javascript
- 为什么我得到Chrome本机消息“;找不到指定的本机消息传递主机&”;
- 检测未绑定的本机函数,如“Array.push”
- 离子 - 本机对话框
- ES6在扩展HTMLButtonElement时无法使用本机setter
- 将JavaScript getter/setter添加到本机不可配置的属性中