2017-08-20 28 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