音ゲー、fps、DTM、プログラミング雑記置き場

ブログタイトル通りに雑記を垂れ流す。

【ServiceNow】Class.create()は何をしているのか?

  • ScriptInclude作成するときやGrideAjaxで非同期実装するときに暗黙的に 使用されている Class.create()Object.extendsObject()が何をしているのか?

  • 以下はServiceNowドキュメントより引用

var GetUserInfo = Class.create();
GetUserInfo.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    managerName: function() {
        //処理(割愛)
    },
    type: 'GetUserInfo'
  • 上記ソースコードの1行目var GetUserInfo = Class.create();
    • 左辺の変数に空のobjectを作成(クラスタイプでいう空のクラス新規作成)
  • 上記ソースコードの2行目GetUserInfo.prototype = Object.extendsObject~
    • object型のprototypeプロパティに別のobject型の参照を格納しているので
      クラスタイプでいうクラス継承を行っている
    • Object.extendsObjectはおそらく引数をメンバとしてオブジェクトを追加したものを作成したものを返す?
    • 第一引数AbstractAjaxProcessorAjaxでの非同期処理を実現するAPI(object型)
      • Cliant ScriptでaddParamでScriptInculdeの情報が得られるのはこのAPIのおかげ

ScriptIncludeのクラス実装イメージ
ScriptIncludeのクラス実装イメージ

prototype.jsについて

  • Class.create()はprototype.jsのメソッド。
    • prototype.jsはJSにクラスベースっぽく書くための構文を
      補完したりするフレームワーク
    • Class.createでクラス作成、Object.extendでクラス継承というようにメソッドを提供している
      • 実際はES6でclass構文はあるしjQueryでも同様の提供はある
      • またjQueryの方が汎用性が高いため主流になっている?
        • 実際に最新Verはprototype.js1.7.3(2015年)、
          jQuery3.6.4(2023年)となっている

まとめ

  • ServiceNowのGlideAjaxによる非同期処理は prototype.js+AbstractAjaxProcessorで実装している

参照サイト

製品ドキュメント:ServiceNow

Prototype JavaScript framework: a foundation for ambitious web applications

Question related to Object.extendsObject() - ServiceNow Community

  • Object.extendsObject()メソッドの元ネタ
    • Q.Object.extendsObject()がprototype.jsのドキュメントにないよおしえて
    • A.prototypeJS Class.createのラッパーメソッドだよ or ServieNowのカスタマイズされたメソッドだよ
      • 有志による情報交換のサイト(SreviceNow Community)なので正当性は取捨選択する必要がある
      • ServiceNow公式ドキュメントよりニッチな情報も拾えるので合わせて調べるといいかも