12

私はここで 10 分か 20 分を過ごしましたが、おそらく過去 1 年間でおそらく十数回、この質問に対する完全な答えを見つけることはできませんでした。

ObjectJavaScript オブジェクトがサブクラスではなくインスタンスであるかどうかを確認するにはどうすればよいですか?

これの使用例の 1 つarguments[0]は、「オプション」ハッシュと「モデル」(MVC) のどちらであるかを確認することです。どちらもネイティブを拡張しObjectますが、異なる方法で処理する必要があります。

私はこれらを試しました:

// some helper to get constructor name
function klassName(fn) {
  if (fn.__name__) {
    return fn.__name__;
  }
  if (fn.name) {
    return fn.name;
  }
  return fn.toString().match(/\W*function\s+([\w\$]+)\(/));
};

var Model = function() {};

m = new Model;
o = {};

Object(o) === o; // true
Object(m) === m; // true, thought it might be false

klassName(o.constructor); // Object
klassName(m.constructor); // Model

場合によってはうまくいきませんklassName(m.constructor)(正確には思い出せませんが、おそらく regex.constructor のようなものです)。そうかもしれませんが、確かなことはわかりません。

何かが{}オブジェクトであるかどうかを確認する防弾方法はありますか?

4

3 に答える 3

11

次のような単純なものかもしれません

function isObj( test ) {
    return test.constructor === Object;
}

あなたが探しているものになりますか?

jsFiddle でテストする

于 2012-04-25T23:41:53.503 に答える
1

これのことですか?http://jsfiddle.net/elclanrs/ukEEw/

var o = {};
var re = /\d/;
var f = function(){};
var d = new Date();

var isObj = function(e){
    return e.toString() === '[object Object]';
};

console.log( isObj(o) ); // True
console.log( isObj(re) ); // False
console.log( isObj(f) ); // False
console.log( isObj(d) ); // False

</p>

于 2012-04-25T23:14:37.370 に答える
0

私はただ一つのことを変えるでしょう

var isObj = function(e){
    if(!e) return false; // change this line
    return e.toString() === '[object Object]';
};
于 2012-08-03T21:32:07.213 に答える