Hi,
given this code:
function test() {
({
call: function(fn) {
fn();
},
test: function() {
/* Position A */
Logger.log(this );
this.call(funct ion() {
/* Position B */
Logger.log(this );
});
}
}).test();
}
Obviously, "this" at Position A points to a different object, than at
Position B. At Position B it's the DOMWindow-Object ( at least in
Safari ) or a the global Context in a standalone SpiderMonkey-Engine.
This makes writing code, that deals alot with Prototype-Library-like
iterators pretty error-prone. Up to now I handle this by defining a
local variable "self", and let the closure-mechanics deal with the
rest, but I hate the way that looks ("this" here, "self" there ), and
are really wondering, if there is a better way/best practice to access
object-properties in an anonymous function.
Greets
Sebastian 2 1755
On Apr 11, 1:35 am, Sebastian Morawietz
<sebastian.mora wi...@googlemai l.comwrote:
Hi,
given this code:
function test() {
({
call: function(fn) {
fn();
},
test: function() {
/* Position A */
Logger.log(this );
this.call(funct ion() {
/* Position B */
Logger.log(this );
});
}
}).test();
}
Obviously, "this" at Position A points to a different object, than at
Position B. At Position B it's the DOMWindow-Object ( at least in
Safari ) or a the global Context in a standalone SpiderMonkey-Engine.
This makes writing code, that deals alot with Prototype-Library-like
iterators pretty error-prone. Up to now I handle this by defining a
local variable "self", and let the closure-mechanics deal with the
rest, but I hate the way that looks ("this" here, "self" there ), and
are really wondering, if there is a better way/best practice to access
object-properties in an anonymous function.
In this case, object properties of an anonymous object - the obvious
solution is don't use an anonymous object where it would be much
easier to use one with a name. :-)
Dunno about "best practice", but a solution (not necessarily best, or
perhaps even good) is:
function test() {
({
_call: function(that, fn) {
fn.call(that);
},
test: function() {
/* Position A */
console.log(thi s);
// Just for the example
var self = this;
this._call(this , function() {
/* Position B */
console.log(thi s == self); // true
});
}
}).test();
}
--
Rob
On Apr 11, 4:35 pm, Sebastian Morawietz
<sebastian.mora wi...@googlemai l.comwrote:
On 11 Apr., 05:22, RobG <rg...@iinet.ne t.auwrote:
On Apr 11, 1:35 am, Sebastian Morawietz
Dunno about "best practice", but a solution (not necessarily best, or
perhaps even good) is:
function test() {
({
_call: function(that, fn) {
fn.call(that);
},
test: function() {
/* Position A */
console.log(thi s);
// Just for the example
var self = this;
this._call(this , function() {
/* Position B */
console.log(thi s == self); // true
});
}
}).test();
}
Thanks for the answer. A closer look to Prototype's sources revealed
to me, that this is basically, how they do it with their iterators
too.
Do they? Dang, that's almost certain to mean it's not in the "best
practice" list of anyone here. :-)
One way to get anonymous iterators to call themselves is with
arguments.calle e, but that doesn't get the "parent" object, which is
what you seem to be after.
--
Rob This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: James |
last post by:
I have a from with 2 fields:
Company & Name
Depening which is completed, one of the following queries will be run:
if($Company){
$query = "Select C*
From tblsample
Where ID = $Company
Order By Company ASC";
|
by: Scott D |
last post by:
I am trying to check and see if a field is posted or not, if not
posted then assign $location which is a session variable to
$location_other. If it is posted then just assign it to
$location_other
I keep getting "Notice: Undefined index: location_other" referring to
(!($_POST)) {
$location_other = $location;
}
else
|
by: Nick |
last post by:
Can someone please tell me how to access elements from a multiple
selection list? From what ive read on other posts, this is correct. I
keep getting an "Undefined variable" error though...
Form page************************************************************
<form action="/process.php" method="get" name="formOne" id="formOne">
<select name="owner" size="6" multiple id="owner">
<option value="one">one</option>
<option...
|
by: Alexander Ross |
last post by:
I have a variable ($x) that can have 50 different (string) values. I want
to check for 7 of those values and do something based on it ... as I see it
I have 2 options:
1) if (($x=="one") || ($x=="two") || ... || ($x=="seven")) ...
or
2) switch ($x){
case("one"):
|
by: Dan Foley |
last post by:
This script runs fine, but I'd like to know why it's so slow.. Thanks
for any help out there on how i can make it faster (it might take up
to 5 min to write these 3 export files whith 15 records each!!!)
Dan
====================
<style>
body, table, tr, td {
font-family: 'verdana';
font-size: 12px;
| |
by: Lee Redeem |
last post by:
Hi there
I've created abd uploaded this basic PHP script:
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<H1 align="center">
|
by: christopher vogt |
last post by:
Hi,
i'm wondering if there is something like $this-> to call a method inside
another method of the same class without using the classname in front.
I actually use
class TEST
{
function func1()
|
by: Phil Powell |
last post by:
Ok guys, here we go again!
SELECT s.nnet_produkt_storrelse_navn
FROM nnet_produkt_storrelse s, nnet_produkt_varegruppe v,
nnet_storrelse_varegruppe_assoc sv, nnet_produkt p
WHERE s.nnet_produkt_storrelse.id = sv.nnet_produkt_storrelse_id
AND sv.nnet_produkt_varegruppe_id = v.nnet_produkt_varegruppe_id
AND sv.nnet_produkt_varegruppe_id IN (
SELECT nnet_produkt_varegruppe_id
FROM nnet_produkt_varegruppe
|
by: Michel |
last post by:
a site like this
http://www.dvdzone2.com/dvd
Can you make it in PHP and MySQL within 6 weeks?
If so, send me your price
2 a r a (at) p a n d o r a . b e
|
by: Maciej Nadolski |
last post by:
Hi!
I can`t understand what php wants from me:( So:
Cannot send session cache limiter - headers already sent (output started at
/home/krecik/public_html/silnik.php:208) in /home/krecik/public_html/silnik.php on
line 251
Line 208: print ( "error: " . mysql_error());
Line 251: session_register("uprawnienia", "zalogowany");
I can understand that sth, is wrong in line 251 after line 208 and it is logical to
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
| |
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
| |
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
|
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |