콘텐츠와 배경 간의 상호 작용은 다음과 같은 비동기 방식으로 구현되어야 하기 때문에 이틀 전에 Chrome 확장 프로그램을 작성하고 있었습니다.
var Test = new Class({
options: {},
initialize: function(args) {
chrome.extension .sendRequest({ 'type ':'options' }, function(options) {
this.options = options;
...
})
}
}); 🎜>
This는 Test 개체여야 하지만 콜백 메서드에서는 비어 있습니다. 이것을 매개변수로 전달한 다음 다시 호출해야 합니까? 다행히 mootools에는 바인딩이라는 좋은 방법이 있습니다.
var Test = new Class({
옵션: {},
초기화: function(args) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = 옵션;
… …
}.bind(this));
괜찮습니다. 계속해서 작성하세요.
options: {},
초기화: function(args ) {
chrome.extension.sendRequest({ 'type':'options' }, function(options) {
this.options = 옵션;
$each(this.options, function(o, i ) {
if (o == '1') {
this.fun1()
} else {
this.fun2() }.bind(this));
}.bind(this));
},
fun1: function {},
fun2: function {}
}) >
바인드를 사용해도 이것이 무엇인지 구별하기가 쉽지 않습니다. 실제 코드는 이보다 훨씬 더 무섭습니다. 어떤 경우에는 이 클래스 대신 다른 변수를 가리키기 위해 이것이 정말로 필요합니다.
가장 일반적으로 사용되는 해결 방법은 다음과 같습니다.
코드 복사
chrome.extension.sendRequest({ 'type': 'options' }, function(options) {
_self.options = options;
$each(_self.options, function(o, i) {
if (o == '1') {
_self .fun1();
} else {
_self.fun2();
}
}); {},
fun2: function {}
});
이것을 대체하기 위해 특별히 _self 변수를 정의했습니다. 파이썬!
이제야 Python 자체가 전혀 불필요한 것이 아니라는 것을 깨달았습니다.