2016-09-18 44 views
1

请看:
https://jsfiddle.net/2aLht10r/1/ enter image description here的JavaScript为什么“这个”不绑定在这个小提琴正确

你可以看到,我得到undefined时,我要的是得到B。 出于某种原因,第11行中的这个值是undefined,它应该是第17行中创建的a对象的这个值(在类B内)。

我的代码有什么问题?

这里是小提琴代码:

class A { 
    selector; 
    ui = { 
    selector: `${this.selector} aaa` 
    } 

    constructor(selector) { 
    this.selector = selector; 
    } 

    clog = console.log.bind(null, this.ui.selector) 
} 

class B { 
    selector; 
    ui = { 
    a: new A('B') 
    } 

    print = this.ui.a.clog.bind(this.ui.a); 
} 

new B().print(); 
+1

我看不出有任何代码。只是一个截图和一个链接。 – Clive

+0

有一个小提琴 – vlio20

+4

令人惊讶的是,有3k代表的人不知道这一点,但确定...如果你的代码不是文字,也可能是不可见的。 – Clive

回答

1

操作的排序绊倒你。

class A { 
    selector; 
    ui = { 
    selector: `${this.selector} aaa` 
    } 

    constructor(selector) { 
    this.selector = selector; 
    } 
} 
console.log(new A("thing").ui.selector) 

打印undefined aaa就像你说的,因为它是相同的:

class A { 
    constructor(selector) { 
    this.ui = { 
     selector: `${this.selector} aaa` 
    }; 

    this.selector = selector; 
    } 
} 
console.log(new A("thing").ui.selector); 

所以你ui属性存储this.selector + 'aaa'已分配传递到构造函数的值之前。

也许你会更好,这样做:

class A { 
    ui = { 
    selector: null, 
    }; 

    constructor(selector) { 
    this.ui.selector = `${selector} aaa`; 
    } 
} 
console.log(new A("thing").ui.selector) 
+0

感谢您指出错误。你能否建议其他一种方法来使用通过构造函数传递的值,然后再使用它(在阻塞函数中)? – vlio20

+0

增加了另一个片段。实际上,我不清楚你为什么在这里使用课堂。至少在给出你的例子时,你可能会更好地使用一个正常的函数来返回一个对象。 – loganfsmyth

+0

这里是一个工作小提琴:https://jsfiddle.net/2aLht10r/2/ – vlio20