Прикреплённый контекст
Будет ли в js когда-нибудь такое:
class Foo {
bar() {
return this;
}
}
let foo = new Foo;
let test = x => x();
test(foo.bar) == foo;
??? В стрелочных функциях же биндится текущий контекст, было бы здорово, если бы и методам класса экземпляр прикреплялся, не? |
"Мы к вам профессор вот по какому поводу." Расскажите народу что такое вы изобрели.
|
Цитата:
Если в синтаксисе ES5, то я вот о чём:
var obj = {
someText: "some text",
func: function () {
return this.someText;
}
};
var func = obj.func;
obj.func() == "some text";
func() == undefined;
|
Эту забавную особенность JavaScript можно было бы назвать: "у вас this отклеился". По ходу ничего не изменится.
![]() |
Цитата:
var obj=function(){
var someText="someText"
return{
someText: someText,
func: function () {
return someText;
}
}
}()
var func = obj.func;
alert([
obj.func(),
func()
])
var obj={
someText: "some text",
}
obj.func=function () {
return this.someText
}.bind(obj)
var func = obj.func;
alert([
obj.func(),
func()
])
// ::: [ 'some text', 'some text' ]
// ::: [ 'some text', 'some text' ]
|
Цитата:
|
Цитата:
Foo=function(name) {
this.name=name
this.bar=function(){return this}.bind(this)
}
foo = new Foo("foo");
test =function(x){return x()}
console.log(test(foo.bar))
alert(test(foo.bar).name)
// ::: { name: 'foo', bar: [Function] }
// ::: foo
|
Цитата:
|
Цитата:
Когда используешь js, постоянно используешь callback-и. И удобно ведь передавать функции—члены класса. Странно, что эту возможность игнорят. Цитата:
Код:
class Foo: |
Цитата:
Цитата:
|
Цитата:
Еще более удивительно, как такое статик-говно умудряется быть настолько тормозным. Такие кастрированные языки обычно хорошо компилируются. Хоть они и памяти отжирают немеряно, с перформансом должно быть ок, в теории. Воистину, феноменальный язык. |
Цитата:
Самом деле, js никуда не идет. Потому что идти некуда. Я вот смотрю на всякие web components, ES6, и не вижу в этом смысла.. Тленно всё в web-е:D |
Цитата:
|
Цитата:
|
Цитата:
Для передачи метода объекта в качестве коллбека с автоматической привязкой контекста сейчас обсуждается специальный оператор - https://github.com/zenparsing/es-function-bind. |
Erolast, спасибо, именно об этом и спрашивал. Полезная инфа.
|
Erolast,
Слышь, ходячая спецификация, ты хоть че-нибудь кроме чтения доков умеешь делать? Хоть одну программу написал в своей жизни? Начни с факториала, мля, чтоли. Лучше поздно, чем никогда, |
Sweet,
Из ES2015, не?
class Point extends Base {
constructor(x,y) {
super();
this[px] = x, this[py] = y;
this.r = function() { return Math.sqrt(x*x + y*y); }
}
get x() { return this[px]; }
get y() { return this[py]; }
proto_r() { return Math.sqrt(this[px] * this[px] +
this[py] * this[py]); }
equals(p) { return this[px] === p[px] &&
this[py] ===
На node.js уже можно через это |
| Часовой пояс GMT +3, время: 16:16. |