2016-09-22 4 views
0

すべてのオブジェクトの結合関数を含むように基本Objectオブジェクトを拡張しようとしています。コードは(明らかではない有効なコード)次のようになります。Object.definePropertiesでselfオブジェクトを参照する

function is_scalar(obj){return (/string|number|boolean/).test(typeof obj);} 
Object.defineProperties(Object.prototype, { 
    "join": { 
     value: (seperator = " ", recursive = false) => { 
      var out = []; 
      Object.keys(Object).forEach((prop) => { 
       if (Array.isArray(Object[prop])) { 
        out.push(Object[prop].join(seperator)); 
       } 
       else if(is_scalar(Object[prop])){ 
        out.push(Object[prop]); 
       } 
      }); 
      return out.join(seperator); 
     }, 
     enumerable: false 
    } 
}); 

問題は、私はObject.Keys句のインスタンスオブジェクトを参照する方法がわからないです。

取り組み

私はすでにthisを試してみましたが、それはwindowオブジェクトを参照します。

また、ObjectObject.prototypeを使用してみましたが、どちらも空に見えます。あなたはis_scalar` `のようなもののためにではなく、メソッドのための矢印機能を使用する必要があります

+1

!簡単な方法を簡略化して(なぜ ':'と '=>'を削除してうまくいくのですか? – Bergi

答えて

1

Don't use an arrow function.

Object.defineProperties(Object.prototype, { 
 
    "join": { 
 
    value: function (seperator = " ", recursive = false) { 
 
     console.log(this); 
 
    }, 
 
    enumerable: false 
 
    } 
 
}); 
 

 

 
({}).join()

+0

ありがとう!ちょうど私の最終的な動作テストのフィドルです。 https://jsfiddle.net/epm3od0x/13/ – Cunning

関連する問題