★ wanayoo — archive 1999 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethodNouvelle recherche | Portail wanayoo

Help us improve the quality of our code samples by answering this brief survey: http://bit.ly/sample-demo

Your Search Results

    Object.prototype.__noSuchMethod__

    非標準

    概要

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

    Object オブジェクトのメソッド
    実装されたバージョン JavaScript ?
    ECMAScript エディション 定義されていない

    構文

    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); // エラーログへメッセージを記録する
      }
    }

    Document Tags and Contributors

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