Функции являются просто типом Объекта.
Все Функциональные объекты имеют , вызов и применяется методы, которые выполняют Функциональный объект, к ним обращаются.
, Когда названо, первый аргумент этим методам определяет объект, на который сошлются this
ключевое слово во время выполнения Функции - если это будет null
или undefined
, глобальный объект, window
, используется для [1 112].
Таким образом, вызывая Функцию...
whereAmI = "window";
function foo()
{
return "this is " + this.whereAmI + " with " + arguments.length + " + arguments";
}
... с круглыми скобками - foo()
- эквивалентно [1 114] или foo.apply(undefined)
, который является эффективно то же как [1 116] или foo.apply(window)
.
>>> foo()
"this is window with 0 arguments"
>>> foo.call()
"this is window with 0 arguments"
Дополнительные аргументы [1 118] передаются как аргументы вызову функции, тогда как единственный дополнительный аргумент [1 119] может определить аргументы в пользу вызова функции как подобный Массиву объект.
Таким образом, foo(1, 2, 3)
эквивалентно [1 121] или foo.apply(null, [1, 2, 3])
.
>>> foo(1, 2, 3)
"this is window with 3 arguments"
>>> foo.apply(null, [1, 2, 3])
"this is window with 3 arguments"
, Если функция является свойством объекта...
var obj =
{
whereAmI: "obj",
foo: foo
};
... доступ к ссылке на Функцию через объект и вызов его с круглыми скобками - obj.foo()
- эквивалентен [1 124] или foo.apply(obj)
.
Однако функции, сохраненные, поскольку, свойства объектов не "связываются" с теми объектами. Как Вы видите в определении obj
выше, так как Функции являются просто типом Объекта, на них можно сослаться (и таким образом может быть передан в отношении Вызова функции или возвращен ссылкой из Вызова функции). То, когда ссылка на Функцию передается, никакая дополнительная информация о том, откуда она была передана [1 144], несут с ним, который является, почему следующее происходит:
>>> baz = obj.foo;
>>> baz();
"this is window with 0 arguments"
вызов к нашей Ссылке на функцию, baz
, не обеспечивает контекста для вызова, таким образом, это - эффективно то же как [1 128], таким образом this
заканчивает тем, что сослался window
. Если мы хотим baz
знать, что это принадлежит [1 132], мы должны так или иначе предоставить ту информацию, когда baz
назван, который является, где первый аргумент [1 134] или apply
и закрытия играет роль.
function bind(func, context)
{
return function()
{
func.apply(context, arguments);
};
}
, Когда Функция выполняется, она создает новый объем и имеет ссылку на любой объем включения. Когда анонимная функция создается в вышеупомянутом примере, она имеет ссылку на объем, в котором она была создана, который является bind
объем. Это известно как "закрытие".
[global scope (window)] - whereAmI, foo, obj, baz
|
[bind scope] - func, context
|
[anonymous scope]
, Когда Вы пытаетесь получить доступ к переменной, эта "цепочка объема" обойдена для нахождения переменной с именем - если текущая область не содержит переменную, Вы смотрите на следующий объем в цепочке, и так далее пока Вы не достигаете глобальной области видимости. Когда анонимная функция возвращается и bind
выполнение концов, анонимная функция все еще имеет ссылку на [1 138] объем, таким образом bind
объем не "уходит".
, Учитывая все вышеупомянутое необходимо теперь быть в состоянии понять, как объем работает в следующем примере, и почему техника для того, чтобы раздать функцию "предварительно связала" с конкретным значением [1 140], это будет иметь, когда это назовут работами:
>>> baz = bind(obj.foo, obj);
>>> baz(1, 2);
"this is obj with 2 arguments"
Вызов Connection.setRequestProperty ()
установит заголовок запроса, что, вероятно, не то, что вы хотите делать в этом случае (если вы спросите меня, я думаю, что назову его setRequestHeader был бы лучшим выбором). Некоторые прокси-серверы могут удалять или переписывать имена нестандартных заголовков, поэтому вам лучше придерживаться соглашения о передаче данных в URL-адресе GET через параметры URL-адреса.
Лучший способ сделать это на BlackBerry - это используйте класс URLEncodedPostData
для правильного кодирования параметров URL:
URLEncodedPostData data = new URLEncodedPostData("UTF-8", false);
data.append("method", "session.getToken");
data.append("developerKey", "value");
data.append("clientID", "value");
url = url + "?" + data.toString();
HTTP GET
отправлять параметры данных в виде пар ключ / значение, закодированных в URL-адресе, например:
GET /example.html // without parameters
GET /example.html?Id= 1 // with one basic parameter
GET /example.html?Id=1&Name=John%20Doo // with two parameters, second encoded
Обратите внимание на следующие правила для разделителей символов:
? - split URL in two pieces: adddress to left and paremeters to right
& - must be used to separate on parameter from another
Вы должны знать свою платформу. функция кодирования строки. Javascript использует escape
, C # использует HttpUtility.UrlEncode
Да, заголовки и свойства - это почти все, что вы можете отправить в GET. Кроме того, вы ограничены определенным количеством символов, которое зависит от браузера - я, кажется, припоминаю примерно 1024 или 2000 символов.