javascript mixin访问此对象

时间:2018-02-15 11:57:07

标签: javascript node.js mixins

我已经创建了一个对象和一个mixin,我已经将mixin分配给了Object,但是我似乎无法从mixin访问该对象,似乎?

mixin.js

class Thing {   
  constructor(something) {
    this.something = something;   
  }

  _otherFunction() {
    // does stuff
  } 
}

module.exports = Thing;

object.js

const Something = require('./mixin');
const Thing = require('./Object');

Object.assign(Thing.prototype, Something);

index.js

doSomething()

当我然后实例化Thing并调用let thing = new Thing({title: 'abc'}); thing.doSomething(); 时,它就无法访问this.something ......所以

docker stop $(docker ps -a -q)

我收到错误无法读取属性'标题'未定义的

1 个答案:

答案 0 :(得分:2)

你需要抛弃箭头函数,而不是使用vanilla函数,因为箭头函数失去了this的范围。



class Thing {   
  constructor(something) {
    this.something = something;   
  }
}

const mixin = {
  // changed arrow function to regular function
  doSomething: function () {
    console.log(this.something.title)
  }
}

const thing = new Thing({title: 'abc'})
Object.assign(thing, mixin)
thing.doSomething()




来自MDN: Arrow Functions

  

箭头函数表达式...并且没有自己的this,arguments,super或new.target。

很多人错误地认为箭头功能的唯一特征是语法更短 - 但事实并非如此。它的主要实用功能是它不会创建自己的this