Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / class: захват и сохранение this / 2 сообщений из 2, страница 1 из 1
11.11.2020, 13:10
    #40017121
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class: захват и сохранение this
Это - работает:
Код: 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
11.11.2020, 13:39
    #40017135
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class: захват и сохранение this
Всем спасибо - заборол:
Код: 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
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / class: захват и сохранение this / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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