Czy można zrobić coś takiego w JavaScript:

var myFunction = function() {
    return true;
};

var anotherFunction = function () {
    return false;
};

$(function () {
    this.myFunction = anotherFunction;

    myFunction(); // to return false
});

Skrzypce

Moja intuicja mówi tak, ale nie działa. Jak mogę osiągnąć tę funkcjonalność?

1
dav_i 29 listopad 2013, 19:10

3 odpowiedzi

Najlepsza odpowiedź

Działa, właśnie zrobiłeś literówkę (nieodebrany this), który powoduje, że stara funkcja jest nazywana;

$(function () {
    this.myFunction = anotherFunction;

    this.myFunction(); // to return false
});

Lub

$(function () {
    myFunction = anotherFunction;

    myFunction(); // to return false
});

W kontekście, w którym nadejdziesz, this.myFunction i myFunction odnoszą się do różnych rzeczy.

Oto twoje stałe skrzypce: http://jsfiddle.net/exfp6/3/

2
Jivings 29 listopad 2013, 15:13

Możesz zastąpić dowolną zmienną wewnątrz zasięgu zewnętrznego z inną zmienną o tej samej nazwie:

var myFunction = function() {
    return true;
};

var anotherFunction = function () {
    return false;
};

$(function () {
    var myFunction = anotherFunction; // override the myFunction name inside this scope

    myFunction(); // returns false
});

myFunction(); // returns true

Możesz przeczytać więcej o zasięgu: https://developer.mozilla.org / EN / Doksy / Web / JavaScript / Reference / Functions_and_function_scope

2
Tibos 29 listopad 2013, 15:13

Działa dla mnie jsfiddle

var myFunction = function () {
    return true;
};

var anotherFunction = function () {
    return false;
};

$(function () {
    myFunction = anotherFunction; //remove this. your function was attach to a variable so by reassigning that variable with "anotherFunction" you will get the desired result.

    $('#result').html(""+myFunction());
});
1
Mark Walters 29 listopad 2013, 15:14