mozilla
Your Search Results

    Object.prototype.__noSuchMethod__

    廃止 Gecko 39 (Firefox 39 / Thunderbird 39 / SeaMonkey 2.36)
    This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

    概要

    オブジェクトで定義されていない関数を呼び出した時に実行される関数を表します。

    構文

    obj.__noSuchMethod__ = fun

    引数

    fun
    以下の引数をとる関数
    function (id, args) { . . . }
    id
    呼び出された未定義の関数の名前
    args
    その関数へ渡された引数の配列

    説明

    オブジェクトで定義されていない関数の呼び出しを試みても、標準の挙動では TypeError 例外が投げられるだけです。オブジェクトのメンバー関数として __noSuchMethod__ を定義しておく事でこの挙動を回避できます。

    __noSuchMethod__ として定義される関数は 2 つの引数をとります。 1 つ目の引数は呼び出しが試みられた関数の名前を表し、 2 つ目の引数はその関数へ渡された引数の配列を表します。この 2 つ目の引数は実配列です。配列を模したオブジェクトである arguments オブジェクトではありません。(Array.prototypeを継承した Array インスタンスの事を実配列と言います。)

    __noSuchMethod__undefined であるかデリートされている、あるいは関数以外である場合には、JavaScript エンジンは通常どおり TypeError 例外を投げます。

    例: __noSuchMethod__ の基本的な使い方

    例えば、あなたのプロジェクトにある errorize メソッドが将来的に廃止されるとします。理由は errorize と言う名前が機能性を充分に表しておらず、 かつ log と言う新しいメソッドでエラーや警告等への対処をする為です。

    その場合には、 __noSuchMethod__ から log を以下の様に呼び出す事で errorize の機能を置き換える事ができます。

    wittyProjectName.log = function log (message, type) {
      if (type == 0) {
        // エラーを記録する
      } else if (type == 1) {
        // 警告を記録する
      }
    }
    
    wittyProjectName.__noSuchMethod__ = function __noSuchMethod__ (id, args) {
      if (id == 'errorize') {
        wittyProjectName.log("wittyProjectName.errorize has been deprecated.\n" +
                             "Use wittyProjectName.log(message, 0) instead.", 1);
        wittyProjectName.log(args[0], 0); // エラーログへメッセージを記録する
      }
    }

    ドキュメントのタグと貢献者

    Contributors to this page: saneyuki_s, Plum.the.goodman, Mgjbot, ethertank, teoli, Potappo
    最終更新者: teoli,