Выполнение функций Javascript по ссылке - PullRequest
0 голосов
/ 17 февраля 2010

Мне интересно, есть ли у кого-нибудь из yall понимание того, как можно выполнить функцию по ссылке в javascript.

http://mootools.net/shell/yL93N/1/

Любая дискуссия будет крутой.*

-Чейз

Ответы [ 8 ]

1 голос
/ 17 февраля 2010

глядя на вашу mooshell, я бы справился с ней в mootools:

http://mootools.net/shell/yL93N/10/

var proxyFunction = new Class({
    message: "hello",
    Binds: ['passByReference','sayit'],
    passByReference: function(func) {
        // console.log(this, this[func]);
        if (this[func] && $type(this[func]) === "function")
            this[func]();
    },
    sayit: function() {
        alert(this.message);
    },
    killit: function() {
        document.write('we\'re dead');
    }
});

$('tryit').addEvent('change',function(e){
    new proxyFunction().passByReference(this.get('value'));
});

// or have a permanent proxy instance if you call methods of the class often and need it to change things.

var proxy = new proxyFunction();
$('tryit').addEvent('change',function(e){
    proxy.passByReference(this.get('value'));
});

Преимущество этого состоит в том, что все ваши прокси-функции находятся за общим объектом, не загрязняют пространство имен вашего окна как глобальные переменные и могут обмениваться данными, относящимися к событию.

1 голос
/ 17 февраля 2010

Не совсем уверен, что вы имеете в виду, но вы можете сделать это:

var func = window.alert;
var args = ["hello world"]
func.apply(window, args)
1 голос
/ 17 февраля 2010

Глобально определенные функции (и переменные) видны как члены глобального window объекта.

Члены объекта могут быть выбраны по имени, используя квадратную скобку: o['k'] совпадает с o.k. Итак, для вашего примера:

var function_name= $(this).val();
window[function_name]();
0 голосов
/ 17 февраля 2010

Вот один с закрытием для ваших аргументов ...

function Runner(func, args) {
  return function() { return func.apply(window, args); };
}

var ref = new Runner(window.alert, ["hello world"]);
ref();
0 голосов
/ 17 февраля 2010

функции являются объектами первого класса в Java Script. Фактически это означает, что вы можете обращаться с ним как с переменной, и передавать его в любое место, где вы ожидаете переменную.

, например

var myFn = function() { alert('inside anonymous fn'); }

function callMyFn(paramFn) 
{
  paramFn();
}

callMyFn(myFn); //inside anonymous fn

function MyFnHolders(argFn)
{
  this.argFn = argFn;
  this.fieldFn = function() {
    alert('inside fn field');
  }
}

var myFnHolders = new MyFnHolders(myFn);
myFnHolders.argFn();   //'inside anonymous fn'
myFnHolders.fieldFn(); //'inside fn field'

//etc

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

0 голосов
/ 17 февраля 2010

Переменные функций в JavaScript уже являются ссылками. Если у вас есть функция:

var explode = function() { alert('boom!'); };

Вы можете передать explode в качестве аргумента, и он передает только дескриптор этой функции, а не весь ее текст

Для доказательства попробуйте:

explode.id = 5;
var detonate = explode;
alert(detonate.id); // => 5
explode.id = 6;
alert(detonate.id); // => 6
0 голосов
/ 17 февраля 2010

Лучший способ сделать это:

func.call();
0 голосов
/ 17 февраля 2010

Как это?

function blah() {
...do stuff
}

myref = blah

myref() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...