0

より正確なtypeof関数を作成し、デフォルトの演算子のように使用したいと思いますtypeoftypeOf()現在、私は他のすべての関数と同じように関数を呼び出していますtypeOf("foo")。ただし、関数の引数をその親で定義せずに取得することは可能ですか?-演算子のようにtypeof

デフォルト:typeof "foo" === "string"

望ましい:typeOf "foo" === "string"

私が試したのは、グローバル変数を定義してオーバーライドすることです。これは機能しますが、実際には解決策ではありません。

window.typeOf = "foo";
(function(window) {
    window.typeOf = (Object.prototype.toString.call(window.typeOf).match(/\[object (.+)\]/)[1] + "").toLowerCase();
}(this));

console.log(typeOf); // "string"
4

2 に答える 2

2

...関数の引数をその親で定義せずに取得することは可能ですか?

いいえ、そうではありません。そのためには、JavaScriptで関数ではなく、新しい演算子を作成できる必要があります。これは、言語の機能ではありません。(2つの関数があります—toStringおよびvalueOf —式の一部としてオブジェクトに対して暗黙的に呼び出される可能性がありますが、ここでは役に立ちません。)

于 2013-03-25T18:34:27.560 に答える
0

いいえ、これは通常のJavaScriptでは不可能です。カスタム演算子を定義することはできません。オブジェクトのみを定義するため、関数を定義できます。関数を呼び出すためのjavascripts構文を変更することもできません。

このような構文を本当に使用したい場合は、coffeescriptを使用して、このようなコードを記述できます。

typeOf = (x) -> "whatever you want"

typeOf "string"

これはこのようなjavascriptに変換されます

var typeOf;

typeOf = function(x) {
  return "whatever you want";
};

typeOf("string");

しかし、それを純粋なJavaScriptで複製する方法はありません。

ちょっと脇に

もう1つ注意してください:たとえ持っていたとしても、この演算子typeOfに名前を付けることはお勧めしません。同じように動作するが、1つの大文字以外の同じ動作がわずかに異なる2つのものに名前を付けることは、追跡およびチェックが難しい微妙なタイプミスエラーを懇願するだけです。のようなものexactTypeまたは他の何かが異なると、潜在的な混乱/バグが削除されます。

于 2013-03-25T18:40:13.777 に答える