编程语言
首页 > 编程语言> > javascript,将功能添加到原型

javascript,将功能添加到原型

作者:互联网

javascript中,是否可以使用类似于咖喱的功能向原型添加功能?

我尝试使用此代码

var helloGoodBye = function (name, fun) {
  return function(message) {
    console.log('hello : ' + name);
    console.log(message);
    console.log('byebye : ' + name);
    return fun(message)
  }                                                                                           
}

var Machine = function (){
  this.state = 'green';
};

Machine.prototype = {
  green: helloGoodBye('green', function (message){
    this.state = 'red';
  }),
  red: helloGoodBye('red', function (message){
    this.state = 'green';
  })
}

var sm = new Machine();

sm[sm.state]('first message');
sm[sm.state]('second message');

我得到这个输出

"hello state: green"
"first message"
"byebye state: green"
"hello state: green"
"second message"
"byebye state: green"

但是这种方式行不通,可能是因为函数中调用的this.state是位于全局范围内的this.state.

解决方法:

是的,您只需要使该方法在接收方对象上调用fun回调即可.使用call

function helloGoodBye(name, fun) {
  return function(message) {
    console.log('hello : ' + name);
    console.log(message);
    console.log('byebye : ' + name);
    return fun.call(this, message);
//            ^^^^^ ^^^^
  }                                                                                           
}

标签:prototype,curry,javascript
来源: https://codeday.me/bug/20191111/2018078.html