これは、実際にはES6のオブジェクト指向モデルに関する質問です。しかし、私は新しいカスタム要素の作成を例として使用するつもりです。クラスキーワードを使用せずにカスタム要素を作成する
だから、新しいカスタム要素がMDNによるタグname
に取るcustomElements.define()
、constructor
、および(オプションである)options
経由で作成する(今日のような)新しいと光沢のある方法、Google、そしてもちろんのspec。リストされているすべてのドキュメントには、constructor
の新しいclass
キーワードのバリエーションが使用されています。
私は新しいclass
の構文が気に入らず、ほとんどの部分を考慮すると、class
は(this tutorialによる)合成糖です。それが可能であればスペックでも、具体的
A parameter-less call to
super()
must be the first statement in the constructor body, to establish the correct prototype chain and this value before any further code is run.
チュートリアルを読むことによって、私がしようとするこれで出てきたと述べている(また、改訂とJavascriptのオブジェクトモデルを再学習するため)。
var _extends = function(_parent) {
var _result = function() {
_parent.call(this);
};
_result.prototype = Object.create(_parent.prototype);
Object.defineProperty(_result.constructor, 'constructor', {
enumerable: false,
writeable: true,
value: _result
});
return _result;
};
customElements.define('foo-bar', _extends(HTMLElement));
console.log(document.createElement('foo-bar'));
私はこのエラーに
Error: The custom element being constructed was not registered with
customElements
.
を取得していますので、私の質問は、それは(可能な場合もnew
なし)class
キーワードを使用せずにそれを行うことが可能ですか?答えが「いいえ」の場合は、Object.create
の代わりにclass
というキーワードを使用する必要がありますか?
LOL、これは知っておくと良いことです。ナー、それをするつもりはない、私はそれが将来の協力者にこのように機能する理由を説明する気がしない。今から推測すると、混乱を避けるために 'class'だけを書いています。 – Jeffrey04
最初はクラスではなくオブジェクトでカスタム要素を定義しようとしましたが、結局はクラスに切り替える必要がありました... – Supersharp
これは私に戻って、javascriptでオブジェクトモデルを修正/再学習するよう促しました。 – Jeffrey04