指定された変数名が JavaScript エンジンまたはブラウザーによって既に定義されている場合、true を返す関数が必要です。
例えば
isNative('window') //true;
isNative('Math') //true;
isNative('myVar') //false
isNative('navigator') //true
isNative('document') //true
指定された変数名が JavaScript エンジンまたはブラウザーによって既に定義されている場合、true を返す関数が必要です。
例えば
isNative('window') //true;
isNative('Math') //true;
isNative('myVar') //false
isNative('navigator') //true
isNative('document') //true
私は解決策を見つけました。
function isNative(variableName) {
if (window['__emptyIframeRef__'] === undefined) {
window['__emptyIframeRef__'] = document.createElement('iframe');
window['__emptyIframeRef__'].setAttribute('style', 'display:none');
document.getElementsByTagName('body')[0].appendChild(window['__emptyIframeRef__']);
}
return window['__emptyIframeRef__'].contentWindow[variableName] !== undefined;
}
これはあなたが望むものではないと思います。まず最初に。グローバル変数は悪いです。したがって、独自のロジック/モジュール/関数をすべて含む独自の名前空間が必要です。
var danial={
module1:{
get:function(bla){...}
},
module2:(function(){
....
}());
}
現在、ネイティブのオブジェクト/関数と自己定義のものの間に違いはありません。それらはすべて、プロトタイプ チェーンの上にオブジェクト プロトタイプを持っており、区別する方法はありません。ただし、オブジェクトがプロパティ自体を持っている場合、またはプロトタイプチェーンを介して「継承」されている場合、たとえば toString は常に存在しますが、オブジェクトに属していません (定義してオーバーライドしていない限り)。次のコードで確認できます
for (var prop in obj) {
if( obj.hasOwnProperty( prop ) ) {
console.log("own property", prop, obj[prop]);
}
}
http://jsfiddle.net/7h3su/で確認してください
function isNative(variableName){
return window[variableName]!=undefined;
}
alert(isNative('window')) //true;
alert(isNative('Math')) //true;
alert(isNative('myVar')) //false
alert(isNative('navigator')) //true
alert(isNative('document')) //true