powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / class: захват и сохранение this
2 сообщений из 2, страница 1 из 1
class: захват и сохранение this
    #40017121
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это - работает:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
var ClassWithId = (function() {
    function ClassWithId(id) {
        this.id = id;
    }
    return ClassWithId;
}());

var ClassWithClosures = (function() {
    var me;

    function ClassWithClosures(id) {
        me = this;
        this.id = id;
    }

    ClassWithClosures.prototype.isMatch = function(num) {
        return (function(_num) {
            return !!me.id.id && _num % 2 === 0;
        })(num);
    };
    return ClassWithClosures;
}());

var arrayOfInt = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var classWithClosure = new ClassWithClosures(new ClassWithId("blah"));
var resultOfFilter = arrayOfInt.filter(classWithClosure.isMatch);
for (var i = 0, l = resultOfFilter.length; i < l; i++) {
    if (window.console && console.log) {
        console.log(resultOfFilter[i]);
    }
}



Как заставить работать это:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class ClassWithClosuresNewStyle {
	var me; !!! error "Uncaught SyntaxError: unexpected token: identifier"

	constructor(id) {
		this.id = id;
	}
	
	isMatch(num) {
	    return(function(_num) {
		  return !!me.id.id && _num %2 === 0;
		})(num);
	}
}

var arrayOfInt = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var classWithClosureNewStyle = new ClassWithClosuresNewStyle(new ClassWithId("blah"));
var resultOfFilter = arrayOfInt.filter(classWithClosureNewStyle.isMatch);
for (var i = 0, l = resultOfFilter.length; i < l; i++) {
    if (window.console && console.log) {
        console.log(resultOfFilter[i]);
    }
}


???

Ну... И... Первоисточник, така сказать, на TypeScript
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
class ClassWithId {
    constructor(public id?: string) {
    }
}

class ClassWithClosures {
    constructor(public id?: ClassWithId) {
    }

    public isMatch(num: number): boolean {
        const tmpId = this.id;

        return ((_id: ClassWithId, _num: number) => {
            return !!_id.id && _num % 2 === 0;
        })(tmpId, num);
    }
}

let arrayOfInt = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let classWithClosure = new ClassWithClosures();
let resultOfFilter = arrayOfInt.filter(classWithClosure.isMatch);
for (let i = 0, l = resultOfFilter.length; i < l; i++) {
    if (window.console && console.log) {
        console.log(resultOfFilter[i]);
    }
}


???
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
class: захват и сохранение this
    #40017135
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо - заборол:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
class ClassWithClosuresNewStyle {
	constructor(id) {
		this.id = id;
	}
	
	isMatch = (num) => {
		return !!this.id.id && num %2 === 0;
	}
}
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / class: захват и сохранение this
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]