how do i make foo()
work?
file1.js
module.exports = class Example{
constructor(something){
this.something = something
}
functions ={
foo(){
return this.something
}
}
}
file2.js
const Exampol = require('./file1.js')
const object = new Exampol("among")
console.log(object.foo())
CodePudding user response:
First: you have to access those functions via .functions
since that's where they live
Second, this
will not be correct, so you can either
Make
foo
an arrow functionor you can
.bind(this)
to a function - like withbar
in this codeyou can't use
.bind
when using function property shorthand though - i.e.foo() { return this.something }.bind(this)
- but you can bind it in theconstructor
See the code for all three solutions - and why you need to bind the non arrow functions
class Example{
constructor(something){
this.something = something;
// bat needs to be bound here
this.functions.bat = this.functions.bat.bind(this);
}
functions ={
// "this" will be correct here
foo: () => this.something,
// bar needs to be bound to "this"
bar: function() { return this.something }.bind(this),
// you can't bind a shorthand property function though
bat() { return this.something },
// this is what happens with no bind
baz() { return this.something },
}
}
const object = new Example("among")
console.log('foo', object.functions.foo())
console.log('bar', object.functions.bar())
console.log('bat', object.functions.bat())
console.log('baz', object.functions.baz())
CodePudding user response:
Remove functions
:
class Example{
constructor(something){
this.something = something;
}
foo(){
return this.something
}
}
const object = new Example("among")
console.log(object.foo())