例如,如果我在我的应用程序中使用prototype.js,该库会使用一些额外的东西扩展对象原型,例如:
// the code is not exactly like this but that doesnt matter
Object.prototype.inspect = function...
当我创建一些对象时,该对象永远不会拥有自己的属性“检查”,这当然是正确的:
// false
{}.hasOwnProperty('inspect');
如果我像这样创建一个对象文字,通过这个对象文字创建的属性是自己的属性,这当然也是正确的:
var myObj = {
myProp: 'myVal'
};
// this would return true here
myObj.hasOwnProperty('myProp');
但是,如果我通过 new 运算符创建一个对象,即使我的 Function 中的属性也不会被识别为 ownproperty。
function MyTest () {}
MyTest.prototype.myProp = function () {};
var myObj = new MyTest();
// this would return false here
myObj.hasOwnProperty('myProp');
有人可以解释为什么会这样吗?我想遍历一个对象,创建一个新对象,它只包含不属于 Objects.prototype 的属性(因此不是通过prototype.js 创建的)。
编辑:我不是创建 myObj 的代码的所有者,我不知道哪个 Function-Constructor 创建了 myObj
EDIT2:感谢 niko,这就是我现在的做法:
var key, newObj = {};
for (key in oldObj) {
if (typeof newObj[key] == 'undefined') {
newObj[key] = oldObj[key];
}
}
for (key in newObj) {
if (newObj.hasOwnProperty(key)) {
// do some stuff here with properties that did not came from the objects.prototype
}
}