Передача функции - это просто ссылка?Javascript - PullRequest
3 голосов
/ 03 января 2012

При использовании Javascript следующим образом:

function Test(Example) {
}

Test.prototype.etc etc etc


function Example() {
}


Example.prototype.etc etc etc


example = new Example();
test = new Test(example);

Это эффективно или я как-то забираю память?

Я спрашиваю об этом, так как в настоящее время в моей игре на javascript есть следующие настройки, и для каждой из них требуются некоторые другие (в скобках):

Камера (холст) Ввод (холст, камера, мозаика) Спрайт (фотоаппарат, холст)

Я поступаю неправильно? Должен ли я передать этот метод другим способом? Меня это беспокоит, так как теперь у меня появилось немало новых случаев спрайта и я подумал, не станет ли это проблемой.

Приветствия

1 Ответ

1 голос
/ 03 января 2012

Объекты JavaScript (и функции) не копируются при передаче в качестве параметров. Взгляните на следующий код (или протестируйте его на JSFiddle ):

function Foo() {};
Foo.prototype.property = 5;
function incrementProperty(parameter) { parameter.property++; };

var foo = new Foo();

alert(foo.property); // 5
incrementProperty(foo);
alert(foo.property); // 6
alert(new Foo().property); // 5, because it's a new object

Объект foo копируется , а не , когда он передается в функцию bar. Это подтверждается тем фактом, что foo s property сохраняет значение вне метода. Проще говоря, foo и parameter указывают на один и тот же объект.

Имейте в виду, что они сами не являются одним и тем же объектом. Если вы переназначите parameter, чтобы указать новое значение в функции bar (parameter = "dummy";), это не повлияет на foo. Имеет ли это различие смысл?

Примечание: строки и числа JavaScript копируются, когда они передаются в качестве параметров.

...