Bound methods in typescript
In Python there is a common pattern that works as follows
class MyClass:
def __init__(self):
self._x = 0
def increment_and_print(self, i):
self._x = self._x + i
print(self._x)
instance = MyClass()
bound_method = instance.increment_and_print
Here, bound_method
is equivalent to a function lambda i: instance.increment_and_print(i)
, i.e. it contains the instance object like in a closure.
Now I wonder with typescript has a similar shorthand notation, i.e.
class MyClass {
private _x : number;
constructor() { this._x = 0; }
incrementAndPrint(i: number) {
self._x += i;
console.log(self._x)
}
}
Would you just use lambda functions to generate a closure like the "bound method" shorthand in Python? Or is there another way?
python typescript
add a comment |
In Python there is a common pattern that works as follows
class MyClass:
def __init__(self):
self._x = 0
def increment_and_print(self, i):
self._x = self._x + i
print(self._x)
instance = MyClass()
bound_method = instance.increment_and_print
Here, bound_method
is equivalent to a function lambda i: instance.increment_and_print(i)
, i.e. it contains the instance object like in a closure.
Now I wonder with typescript has a similar shorthand notation, i.e.
class MyClass {
private _x : number;
constructor() { this._x = 0; }
incrementAndPrint(i: number) {
self._x += i;
console.log(self._x)
}
}
Would you just use lambda functions to generate a closure like the "bound method" shorthand in Python? Or is there another way?
python typescript
I think the solution is to use thebind
method:var instance = new MyClass(); var bound_method = instance.increment_and_print.bind(instance);
. (The syntax may be off slightly.)
– chepner
Nov 20 '18 at 15:11
add a comment |
In Python there is a common pattern that works as follows
class MyClass:
def __init__(self):
self._x = 0
def increment_and_print(self, i):
self._x = self._x + i
print(self._x)
instance = MyClass()
bound_method = instance.increment_and_print
Here, bound_method
is equivalent to a function lambda i: instance.increment_and_print(i)
, i.e. it contains the instance object like in a closure.
Now I wonder with typescript has a similar shorthand notation, i.e.
class MyClass {
private _x : number;
constructor() { this._x = 0; }
incrementAndPrint(i: number) {
self._x += i;
console.log(self._x)
}
}
Would you just use lambda functions to generate a closure like the "bound method" shorthand in Python? Or is there another way?
python typescript
In Python there is a common pattern that works as follows
class MyClass:
def __init__(self):
self._x = 0
def increment_and_print(self, i):
self._x = self._x + i
print(self._x)
instance = MyClass()
bound_method = instance.increment_and_print
Here, bound_method
is equivalent to a function lambda i: instance.increment_and_print(i)
, i.e. it contains the instance object like in a closure.
Now I wonder with typescript has a similar shorthand notation, i.e.
class MyClass {
private _x : number;
constructor() { this._x = 0; }
incrementAndPrint(i: number) {
self._x += i;
console.log(self._x)
}
}
Would you just use lambda functions to generate a closure like the "bound method" shorthand in Python? Or is there another way?
python typescript
python typescript
edited Nov 20 '18 at 15:34
Vít Kotačka
533523
533523
asked Nov 20 '18 at 15:06
wirrbelwirrbel
1,61711436
1,61711436
I think the solution is to use thebind
method:var instance = new MyClass(); var bound_method = instance.increment_and_print.bind(instance);
. (The syntax may be off slightly.)
– chepner
Nov 20 '18 at 15:11
add a comment |
I think the solution is to use thebind
method:var instance = new MyClass(); var bound_method = instance.increment_and_print.bind(instance);
. (The syntax may be off slightly.)
– chepner
Nov 20 '18 at 15:11
I think the solution is to use the
bind
method: var instance = new MyClass(); var bound_method = instance.increment_and_print.bind(instance);
. (The syntax may be off slightly.)– chepner
Nov 20 '18 at 15:11
I think the solution is to use the
bind
method: var instance = new MyClass(); var bound_method = instance.increment_and_print.bind(instance);
. (The syntax may be off slightly.)– chepner
Nov 20 '18 at 15:11
add a comment |
1 Answer
1
active
oldest
votes
Yes you can do this using bind - functions are first class in JavaScript so you can pass them around quite easily:
class MyClass {
private _x: number = 0;
incrementAndPrint(i: number) {
this._x += i;
console.log(this._x)
}
}
const myClass = new MyClass();
const incrementAndPrint = myClass.incrementAndPrint.bind(myClass);
incrementAndPrint(2);
incrementAndPrint(3);
You can also do it with an arrow-function:
const incrementAndPrint = (num: number) => myClass.incrementAndPrint(num);
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53395911%2fbound-methods-in-typescript%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Yes you can do this using bind - functions are first class in JavaScript so you can pass them around quite easily:
class MyClass {
private _x: number = 0;
incrementAndPrint(i: number) {
this._x += i;
console.log(this._x)
}
}
const myClass = new MyClass();
const incrementAndPrint = myClass.incrementAndPrint.bind(myClass);
incrementAndPrint(2);
incrementAndPrint(3);
You can also do it with an arrow-function:
const incrementAndPrint = (num: number) => myClass.incrementAndPrint(num);
add a comment |
Yes you can do this using bind - functions are first class in JavaScript so you can pass them around quite easily:
class MyClass {
private _x: number = 0;
incrementAndPrint(i: number) {
this._x += i;
console.log(this._x)
}
}
const myClass = new MyClass();
const incrementAndPrint = myClass.incrementAndPrint.bind(myClass);
incrementAndPrint(2);
incrementAndPrint(3);
You can also do it with an arrow-function:
const incrementAndPrint = (num: number) => myClass.incrementAndPrint(num);
add a comment |
Yes you can do this using bind - functions are first class in JavaScript so you can pass them around quite easily:
class MyClass {
private _x: number = 0;
incrementAndPrint(i: number) {
this._x += i;
console.log(this._x)
}
}
const myClass = new MyClass();
const incrementAndPrint = myClass.incrementAndPrint.bind(myClass);
incrementAndPrint(2);
incrementAndPrint(3);
You can also do it with an arrow-function:
const incrementAndPrint = (num: number) => myClass.incrementAndPrint(num);
Yes you can do this using bind - functions are first class in JavaScript so you can pass them around quite easily:
class MyClass {
private _x: number = 0;
incrementAndPrint(i: number) {
this._x += i;
console.log(this._x)
}
}
const myClass = new MyClass();
const incrementAndPrint = myClass.incrementAndPrint.bind(myClass);
incrementAndPrint(2);
incrementAndPrint(3);
You can also do it with an arrow-function:
const incrementAndPrint = (num: number) => myClass.incrementAndPrint(num);
answered Nov 20 '18 at 15:13
FentonFenton
155k44291315
155k44291315
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53395911%2fbound-methods-in-typescript%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I think the solution is to use the
bind
method:var instance = new MyClass(); var bound_method = instance.increment_and_print.bind(instance);
. (The syntax may be off slightly.)– chepner
Nov 20 '18 at 15:11