Нет, свойства объектов не будут загадочно исчезать без причины - по крайней мере, не исключая ошибок реализации, которые следует легко исключить, посмотрев, происходит ли то же самое в IE, Chrome и Firefox, каждый из которых имеет своисобственные (и очень разные) реализации Javascript.
Если какой-либо из этих уровней происходит косвенно , то это уже другой вопрос.Например, если в какой-то момент что-то сериализует объект в строку JSON, а затем воссоздает его, результатом будет объект с почти всеми свойствами с привязанными к ним данными, но не с теми, с которыми связаны функции.Но это не передача ссылки, это сериализация и десериализация.
То же самое может произойти, если кто-то делает копию, подобную этой:
dest = {};
for (name in src) {
value = src[name];
if (typeof value !== "function") {
dest[name] = value;
}
}
Например, что-то делает только для данныхкопия.Это также может произойти менее очевидно, если что-то делает это:
function clone(src) {
dest = {};
for (name in src) {
if (src.hasOwnProperty(name)) {
dest[name] = src[name];
}
}
return dest;
}
Это делает «поверхностную» копию объекта, копируя только свойства, которые он сам на него установил, и игнорируя любые свойства, которые он получает.от своего прототипа.Большинство (но далеко не все) объектов свойств наследуют от своих прототипов , как правило, , чтобы быть функциями, и поэтому результатом этого может показаться копия только для данных.Пример:
function Thingy() {
}
Thingy.prototype.foo = function() {
}
var t = new Thingy();
t.bar = 42;
// `t` has a `foo` function bound to it, indirectly through its prototype,
// and a `bar` property with the value 42
var x = clone(t);
// `x` does *not* have a `foo` function, but it does have a `bar` property,
Конечно, вы также можете удачно удалить свойства из объектов, которые ссылаются на функции:
for (name in obj) {
if (typeof obj[name] === "function" && obj.hasOwnProperty(name)) {
delete obj[name];
}
}
Но, опять же, это не подразумевается, это явно.Но если он где-то спрятан в рабочей функции, его будет довольно легко пропустить.