以下の内容はhttps://var.blog.jp/archives/81507050.htmlより取得しました。



COMMENT

 コメント一覧 (5)

    • 1. petamoriken
    • 2020/03/07 18:50
    • クラスの prototype の __proto__ を変更できないのであれば this の __proto__ を変更したらどうだろうと思ってこのようなコードを書いてみました。いかがでしょうか。
      https://gist.github.com/petamoriken/bb99ca136bc663d3c6ac
    • 0
       

       

      likedしました

      liked
      • 3.    [管理人]
      • 2020/03/09 22:04
      • >>1
        引き続きコメントありがとうございます

        > クラスの prototype の __proto__ を変更できないのであれば this の __proto__ を変更したらどうだろうと思って

        本文中の class C みたいな中身が空っぽならこれでいいかなとも思ったのですが 最終的にやりたかったのが 本文の下の方にある class EE のように on や off などのメソッドを追加したものだったのでその方法は取りませんでした
        on などのメソッドも this のプロパティとして代入してしまえば出来はするのですけどね

        Gist 拝見しました
        Symbol.hasInstance を設定していますが これが必要な理由ってなんでしょうか?
        もとが EventTarget を継承した DocumentFragment を継承して new しますし インスタンスの __proto__ も EventTarget.prototype に設定しているのでなくても同じのように思うのですけど……ないとうまく行かないケースありますか?

        instanceof はこれ⇩でも true になります

        class Foo {}
        x = { __proto__: Foo.prototype }
        console.log(x instanceof Foo)
        // true
      • 0
         

         

        likedしました

        liked
      • 4. ななしさん
      • 2020/03/10 00:12
      • >>3

        自分のコード例ですと MyEventTarget.prototype は DocumentFragment.prototype を継承するものの、new MyEventTarget() をした際には this が EventTarget.prototype は継承するものの DocumentFragment.prototype を継承しないように変更されるため instanceof でちゃんと判定できなくなっています。そのため @@hasInstance を使っていました。

        class MyEventTarget extends DocumentFragment { constructor() { super(); Object.setPrototypeOf(this, EventTarget.prototype); } }

        // false
        console.log(new MyEventTarget instanceof MyEventTarget);


        > ここまで来ると class 構文使う必要があるのかってくらいです

        function を使ったほうがよさそうかなと思って作り直してみました。。。
        https://gist.github.com/petamoriken/d3745051d6f7684af58985d18efa2786
      • 0
         

         

        likedしました

        liked
      • 5.    [管理人]
      • 2020/03/10 00:35
      • >>4
        あっ すみません勘違いしてました

        console.log(new MyEventTarget instanceof MyEventTarget)

        じゃなくて

        console.log(new MyEventTarget instanceof EventTarget)

        で考えてました……
      • 0
         

         

        likedしました

        liked
    • 2. petamoriken
    • 2020/03/07 21:46
    • いや、無理に継承を使わない方が変な影響が出なくて良さそうですね。失礼しました。
    • 0
       

       

      likedしました

      liked



以上の内容はhttps://var.blog.jp/archives/81507050.htmlより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14