Мне было интересно, если это возможно: передать объект функции и переопределить весь объект с полным другим объектом внутри этой функции, чтобы его значение было постоянно изменено. Поскольку объекты передаются по ссылке, у меня возникает ощущение, что она должна работать как-то, но я понятия не имею, как это сделать. Для того, чтобы поместить его в код, он должен сделать что-то вроде этого:Переопределение объекта, переданного функции
function a() {
console.log("i am a");
}
function b() {
console.log("i am b");
}
function override(func1, func2) {
func1 = func2;
}
override(a, b);
a(); //"i am b" expected
Это, очевидно, не работает, потому что я просто переопределение переменной func1
, но я думаю, вы получите идею. И я решил использовать функции вместо чистых объектов, потому что вы могли бы легко «переопределить» объект, просто удалив его свойства и скопировав новые свойства со второго объекта. Но этого я не хочу.
И прежде чем вы спросите, я не пытаюсь решить проблему с реальной жизнью, я просто спрашиваю из любопытства. Так есть ли способ достичь этого, а если нет, есть ли причина, почему нет?
Спасибо!
Так что, делая что-то вроде 'a = b', я на самом деле просто изменяю, что означает' a', но не действительно значение, которое 'a' ссылается, до этого момента? – basilikum
Да, предполагая, что мы говорим об объектах (а не о примитивном числе или строках или каких-либо значениях) 'a = b' означает« изменить то, что означает 'a', так что оно относится к тому же, что и' b'. Это не влияет на вещь 'a', упомянутую до этого _except_, что если' a' относится к объекту, к которому не относятся никакие другие переменные, тогда этот объект будет собираться мусором. – nnnnnn
Хорошо, это имеет смысл. Таким образом, нет абсолютно никакой возможности для того, чтобы динамически изменять данные, к которым относится какой-то объект, к чему-то совершенно другому?Я имею в виду, что оператор присваивания в моем вопросе состоял только в том, чтобы сделать идею понятной, но, возможно, есть что-то еще, что можно было бы сделать? – basilikum