2017-08-20 54 views
2

我有這個類ES6類通過這個靜態類函數

import { ObjectUtilities } from '~/utils/'; 

class Object{ 
    constructor(object) { 

     Object.assign(this, { ...object }); 

    } 

    utils = ObjectUtilities; 
} 

這個階級與統計的方法還(類包含許多靜態方法)

class ObjectUtilities { 

    static getKey(object){ 
    return object.key; 
    } 
} 

,我想知道如果它可能將「this」從Object類 共享到靜態方法「getKey(object)」

想要這樣做:

let x = new Object(object); 
x.utils.getkey(this); 

(ObjectUtilities許多靜態funcs中,我不想這樣做對他們每個人的)

感謝幫助我......

+1

你所描述的不再是一種靜態方法。你想用'ObjectUtilities.getKey(x)'代替。 – Bergi

+1

'utils = ObjectUtilities;'和'{... object}'是無效的ES6。反正你也不應該這樣做。 – Bergi

+1

[永遠不要只使用靜態方法的'class'](https://stackoverflow.com/q/29893591/1048572) – Bergi

回答

2

您可以添加一個constructorObjectUtilities類,你給定上下文綁定到getKey功能:

class ObjectUtilities { 
 
    constructor(_this) { 
 
    this.getKey = this.getKey.bind(_this); 
 
    } 
 
    
 
    getKey() { 
 
    return this.key; 
 
    } 
 
} 
 

 
class MyObject { 
 
    constructor(object) { 
 
     Object.assign(this, { ...object }); 
 
     this.utils = new ObjectUtilities(this); 
 
    } 
 
} 
 

 
const objectFoo = { key: 'foo' }; 
 
const objectBar = { key: 'bar' }; 
 

 
let x = new MyObject(objectFoo); 
 
let y = new MyObject(objectBar); 
 

 
console.log(x.utils.getKey(), y.utils.getKey());

+0

對於這個解決方案,我需要再次發送「x」對象,我想知道我是否可以做類似於 x.utils.getKey(); 並在類內做這個綁定 –

+0

@GoorLavi我已經更新了我的答案,檢查它是否適合你:)不要忘記upvote和驗證它是否是! – Erazihel

+0

請在構造函數中放入'this.utils = new ObjectUtilities(this);',這在ES6中是正確的。 – Bergi