是否有对象函数被取消设置一个原因或根本不是故意删除或根本不施加任何原因?

我维护别人的代码,并通过它去了很多次。我使用谷歌铬合金真棒调试器及TextMate的。这些帮助我找到错误的根源比较快的。

我现在的问题是,我有一个目的:类型。这个对象包含...类型。而这些类型具有的功能和连接到他们的其他变量。

出于某种原因,在代码的中间,这种类型的已经通过参考百万的大概时间过去了。当涉及到它的部分代码的某一部分,似乎已经消失了。噗!而它的消失..!

任何人都有一个线索(其他比它被删除其他地方此前在代码中,我已经在寻找那个)

实施例

现在,我只需添加在飞行的功能。不喜欢它虽然,感觉有点出代码的控制的:

if(identifier.kind.hasOwnProperty('getWarning')) {
    identifier.kind.getWarning = CLEANROOM.types[kind].getWarning;
}
有帮助吗?

解决方案

没有,对象的属性不会神秘消失没有理由 - 至少,不禁止执行错误,应通过看,如果同样的事情发生在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];
    }
}

但同样,这不是暗示,这是明确的。但是,如果它藏在工人功能的地方,这将会是很容易错过。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top