>웹 프론트엔드 >JS 튜토리얼 >이것과 self_javascript 기술 사용에 대한 지침

이것과 self_javascript 기술 사용에 대한 지침

WBOY
WBOY원래의
2016-05-16 18:22:011583검색

콘텐츠와 배경 간의 상호 작용은 다음과 같은 비동기 방식으로 구현되어야 하기 때문에 이틀 전에 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));


괜찮습니다. 계속해서 작성하세요.


코드 복사 코드는 다음과 같습니다. var Test = new Class({
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 {}
}) >


바인드를 사용해도 이것이 무엇인지 구별하기가 쉽지 않습니다. 실제 코드는 이보다 훨씬 더 무섭습니다. 어떤 경우에는 이 클래스 대신 다른 변수를 가리키기 위해 이것이 정말로 필요합니다.
가장 일반적으로 사용되는 해결 방법은 다음과 같습니다.



코드 복사

코드는 다음과 같습니다. var Test = new Class({ 옵션: {}, initialize: function(args) { var _self = this;
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 자체가 전혀 불필요한 것이 아니라는 것을 깨달았습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.