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
fooan arrow functionor you can
.bind(this)to a function - like withbarin this codeyou can't use
.bindwhen 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())
