|
|
|
JavaScript, недопонимаю
|
|||
|---|---|---|---|
|
#18+
<script> function makeProperty(o, name, predicate) { var value; o["set" + name] = function(v) { alert (predicate); }; } var o = {}; makeProperty(o, "Name", function(x) { return typeof x == "string"; }); o.setName("Franks"); o.setName("Frank"); </script> Что-то не понимаю, каким образом сохраняется значение predicate между вызовами методов o.setName(), ведь это значение передавалось только makeProperty() и нигде не сохранялось. Помогите, пожалуйста, разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2010, 13:31:18 |
|
||
|
JavaScript, недопонимаю
|
|||
|---|---|---|---|
|
#18+
ICP, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. То, что обозначено (1), (2) и (3) ссылается на одно и то же место в памяти. При этом ссылка (1) (но не значение, на которое она ссылается) уничтожается сразу* после скобки и точки с запятой после вызова makeProperty, ссылка (2) уничтожается сразу после выхода из функции makeProperty - происходит это потому, что обратится отдельно к ним вы никак не сможете: первая не именована, вторая недоступна вне данного конкретного вызова функции. А вот ссылка (3) остается до тех пор, пока у o есть свойства setName - конкретно вы сами к predicate внутри o.setName уже обратиться не можете, но программа при каждом вызове o.setName может. Если удалить метод o.setName, то на функцию Код: plaintext 1. 2. * сразу - не совсем сразу, а когда до нее доберется garbage collector. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2010, 13:58:42 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=36440810&tid=1453600]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
179ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 451ms |

| 0 / 0 |
