Как преобразовать & ldquo; объект & rdquo; в функцию в JavaScript?

К сожалению, значение таких вещей, как (и \ (меняются между регулярными выражениями стиля Emacs и большинством других стилей). Поэтому, если вы попытаетесь избежать этого, вы можете делать противоположное тому, что вы хотите.

Итак, вам действительно нужно знать, какой стиль вы пытаетесь процитировать.

37
задан mjs 23 September 2008 в 22:45
поделиться

4 ответа

Легко быть перепутанным здесь, но Вы не можете (легко или ясно или насколько я знаю), делают то, что Вы хотите. Надо надеяться, это поможет ясным вещам встать.

Первый, каждый объект в JavaScript наследовался Объектному объекту.

//these do the same thing
var foo = new Object();
var bar = {};
115-секундный, функции объекты в JavaScript. А именно, они - Функциональный объект. Функциональный объект наследовался Объектному объекту. Контроль Функциональный конструктор

var foo = new Function();
var bar = function(){};
function baz(){};

, Как только Вы объявляете, что переменная "Объект", Вы не можете (легко или ясно или насколько я знаю) преобразовывает его в Функциональный объект. Необходимо было бы объявить новый Объект Функции типа (с функциональным конструктором, присвоив переменной анонимную функцию и т.д.), и копия по любым свойствам методов от старого объекта.

Наконец, ожидая возможный вопрос, даже как только что-то объявляется как функция, Вы не можете (насколько я знаю), изменяют functionBody/source.

27
ответ дан Alan Storm 23 September 2008 в 22:45
поделиться
  • 1
    Неправильно: Когда Вы входите Полученный:: Полученный, this-> уже точки к Производному объекту. Это отличается от, например, Java, где это. может указать на объект MostDerived. Ни на каком языке будет this-> укажите на " a" Базовый класс в Derived' s конструктор. Кроме того, с MI, на какую Основу это указало бы? – MSalters 15 January 2009 в 08:51

Кажется, нет стандартного способа сделать это, но это работает.

, ПОЧЕМУ однако, вопрос.

function functionize( obj , func )
{ 
   out = func; 
   for( i in obj ){ out[i] = obj[i]; } ; 
   return out; 
}

x = { a: 1, b: 2 }; 
x = functionize( x , function(){ return "hello world"; } );
x()   ==> "hello world" 

нет просто никакого другого способа достигнуть, это, делая

x={}
x() 

возвратит "ошибку типа". потому что "x" является "объектом", и Вы не можете изменить его. его почти столь же разумный как пытающийся сделать

 x = 1
 x[50] = 5
 print x[50] 

это не будет работать. 1 целое число. целые числа не имеют методов массива. Вы не можете сделать его.

23
ответ дан Kent Fredric 23 September 2008 в 22:45
поделиться
  • 1
    Документы Муравья довольно плохи, для ярмарки. Им нужно некоторое серьезное внимание. – skaffman 28 July 2009 в 14:51

Используйте временную переменную:

var xxx = function()...

тогда копия все свойства от исходного объекта:

for (var p in bar) { xxx[p] = bar[p]; }

наконец повторно присваивают новую функцию со старыми свойствами к исходной переменной:

bar = xxx;
1
ответ дан Avner 23 September 2008 в 22:45
поделиться

JavaScript позволяет функциям рассматриваться как объекты - можно добавить свойство к функции. Как дела реверс, и добавляет функцию к объекту?

Вы, кажется, немного смущены. Функции, в JavaScript, объекты. И переменные переменная . Вы не ожидали бы, что это будет работать:

var three = 3;
three = 4;
assert(three === 3);

... итак, почему Вы ожидали бы, что присвоение функции к Вашей переменной так или иначе сохранит свое предыдущее значение? Возможно, некоторые аннотации разъяснят вещи для Вас:

// assigns an anonymous function to the variable "foo"
var foo = function() { return 1; }; 
// assigns a string to the property "baz" on the object 
// referenced by "foo" (which, in this case, happens to be a function)
foo.baz = "qqqq";
0
ответ дан Shog9 23 September 2008 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: