2015-09-26 64 views
3
function Person() 
} 

function Person.prototype.init() { 
    request('http://google.fr').on('error', this.onError.bind(this)); 
} 

function Person.prototype.onError(error) { 
    console.log(error); 
} 

bind.thisinit()需要。我有什麼ECMAScript 6替代方案來解決這個問題?這是唯一的解決方案,似乎我不能在這裏應用箭頭。在ES6中替代.on('error',this.onError.bind(this))?

+0

能否請您解決您的語法錯誤?你不能在函數標識符中使用點。 – Bergi

+1

你爲什麼要綁定這個方法呢?它對我來說看起來相當靜止。 – Bergi

+0

可能的重複[我可以在類方法中使用ES6胖箭頭?](http://stackoverflow.com/q/31362292/1048572) – Bergi

回答

2

直接回答你的問題,ES6不提供,我們可以使用,以避免在其點調用結合onError任何附加功能。 ES6沒有廢除JavaScript執行上下文的行爲。

作爲一個方面說明,您聲明您的實例方法的方式是非法的,並會引發錯誤。

Person.prototype.init = function() { 
    request('http://google.fr').on('error', this.onError.bind(this)); 
}; 

Person.prototype.onError = function (error) { 
    console.log(error); 
}; 

目前您onError方法不會從任何錯誤,如果通過綁定遭遇:他們應該作如下聲明。這是因爲你沒有在onError方法體內使用this

// Safe unbound method 
Person.prototype.onError = function (error) { 
    console.log(error); 
}; 

// Unsafe unbound method 
Person.prototype.onError = function (error) { 
    console.log(this, error); 
      // ^^^^ 
}; 
1

您可以使用fat arrow functions

request('http://google.fr').on('error', (error) => this.onError(error)); 
+0

不確定這是否是一項改進。 – Mahoni