通过new创建的Javascript对象属性的所有权
Ownership of Javascript Object-Properties created via new
例如,如果我在我的应用程序中使用prototype.js,库扩展对象的原型与一些额外的东西,例如:
// the code is not exactly like this but that doesnt matter
Object.prototype.inspect = function...
当我创建一些对象时,该对象永远不会有自己的属性"inspect",这当然是正确的:
// false
{}.hasOwnProperty('inspect');
如果我像这样创建一个Object-literal,通过这个Object-literal创建的属性是ownproperties,这当然也是正确的:
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');
有人能解释一下为什么会这样吗?我想迭代一个对象,创建一个只包含不属于对象的属性的新对象。原型(因此不是通过Prototype .js创建的)。
编辑:我不是创建myObj的代码的所有者,我不知道哪个函数构造器创建myObj
多亏了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
}
}
hasOwnProperty
的唯一目的是将附加到实际对象(即实例)的属性与附加到原型的属性区分开来。如果你通过new
操作符构造一个实例,这个新实例被链接到构造它的函数的原型——原型的属性不会被复制到新实例中!
考虑像这样复制不在Object.prototype中的所有内容:
var newObj = {};
for (var key in oldObj) {
if (typeof newObj[key] == 'undefined') {
newObj[key] = oldObj[key];
}
}
但是,Object的属性。prototype仍然可以通过newObj
访问,因为它是Object的一个实例。
因为它被分配给prototype
,这实际上有点像为对象创建一个模糊的类或祖先,并赋予其属性。该属性从未直接赋值给myObj
。
值得注意的是,您可以直接将原型应用于myObj
而不是其构造函数,或者将myProp
直接应用于myTest
而不调用原型,myProp
仍然不是myObj
自己的属性。
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在选项卡上定义属性'的主窗口对象
- 锚点元素的href属性自动更改
- jQuery最近父级的数据属性选择器
- 通过new创建的Javascript对象属性的所有权