Javascript 对父原型的更改会将属性添加到子原型
前言: 我有一个对象,我们称它为“A”。我通过Javascript 对父原型的更改会将属性添加到子原型,javascript,prototypal-inheritance,Javascript,Prototypal Inheritance,前言: 我有一个对象,我们称它为“A”。我通过a向它的原型添加一个函数。现在,“A”的所有子级也都有一个属性“AsDf==-1” 我一直在四处阅读,我想我理解正在发生的事情,但我希望得到一些确认,也许还有更多关于它如何工作的信息(假设这还不是全部) 问题: 这是因为A.\uuuu proto\uuuuu是对象,这意味着我添加了'AsDf=-1;'对所有对象 此外,如果是这样的话,那么创建一个与“a”相同的新对象(原型不是对象)会不会让它只向其添加“AsDf”,而不向其子对象添加?(假设所有子对
a向它的原型添加一个函数代码>。现在,“A”的所有子级也都有一个属性“AsDf==-1”
我一直在四处阅读,我想我理解正在发生的事情,但我希望得到一些确认,也许还有更多关于它如何工作的信息(假设这还不是全部)
问题:
- 这是因为
A.\uuuu proto\uuuuu
是对象,这意味着我添加了'AsDf=-1;'对所有对象
- 此外,如果是这样的话,那么创建一个与“a”相同的新对象(原型不是对象)会不会让它只向其添加“AsDf”,而不向其子对象添加?(假设所有子对象都是对象,当然不是新对象)
不要通过\uuuu proto\uuuu
,或者通过A.constructor.prototype
(如果可用)或者Object.getPrototypeOf(A)
如果Object.getPrototypeOf(A)==Object.prototype
那么在这里设置属性意味着每个对象都继承它们
您如何创建A
?最好执行A=Object.create({})代码>,给自己一个可以安全使用的原型
如果是一个对象而不是一个函数,你怎么会有的“子对象”?你的意思是child=A.someProperty={}代码>
使用Object.create({})
不要通过\uuuu proto\uuuu
,或者通过A.constructor.prototype
(如果可用)或者Object.getPrototypeOf(A)
如果Object.getPrototypeOf(A)==Object.prototype
那么在这里设置属性意味着每个对象都继承它们
您如何创建A
?最好执行A=Object.create({})代码>,给自己一个可以安全使用的原型
如果是一个对象而不是一个函数,你怎么会有的“子对象”?你的意思是child=A.someProperty={}代码>
使用Object.create({})
不要通过\uuuu proto\uuuu
,或者通过A.constructor.prototype
(如果可用)或者Object.getPrototypeOf(A)
如果Object.getPrototypeOf(A)==Object.prototype
那么在这里设置属性意味着每个对象都继承它们
您如何创建A
?最好执行A=Object.create({})代码>,给自己一个可以安全使用的原型
如果是一个对象而不是一个函数,你怎么会有的“子对象”?你的意思是child=A.someProperty={}代码>
使用Object.create({})
不要通过\uuuu proto\uuuu
,或者通过A.constructor.prototype
(如果可用)或者Object.getPrototypeOf(A)
如果Object.getPrototypeOf(A)==Object.prototype
那么在这里设置属性意味着每个对象都继承它们
您如何创建A
?最好执行A=Object.create({})代码>,给自己一个可以安全使用的原型
如果是一个对象而不是一个函数,你怎么会有的“子对象”?你的意思是child=A.someProperty={}代码>
使用Object.create({})
3.我使用mapping pluginfromJSON
创建它们,因为它们是用C#编码的MVC视图模型。4.是的,它们是作为对象的“A”的属性。当我把问题打印出来时,我开始慢慢意识到问题的答案,但我想不管怎么说,把它贴出来而不是删除它也无妨。我想我(或其他人)可能会从中学到一些东西。还有,isObject.create({})代码>创建对象的唯一方法?像Object.create(Object)这样的东西怎么样代码>?这有不同的效果吗。我使用mapping pluginfromJSON
创建它们,因为它们是用C#编码的MVC视图模型。4.是的,它们是作为对象的“A”的属性。当我把问题打印出来时,我开始慢慢意识到问题的答案,但我想不管怎么说,把它贴出来而不是删除它也无妨。我想我(或其他人)可能会从中学到一些东西。还有,isObject.create({})代码>创建对象的唯一方法?像Object.create(Object)这样的东西怎么样代码>?这有不同的效果吗。我使用mapping pluginfromJSON
创建它们,因为它们是用C#编码的MVC视图模型。4.是的,它们是作为对象的“A”的属性。当我把问题打印出来时,我开始慢慢意识到问题的答案,但我想不管怎么说,把它贴出来而不是删除它也无妨。我想我(或其他人)可能会从中学到一些东西。还有,isObject.create({})代码>创建对象的唯一方法?像Object.create(Object)这样的东西怎么样代码>?这有不同的效果吗。我使用mapping pluginfromJSON
创建它们,因为它们是用C#编码的MVC视图模型。4.是的,它们是作为对象的“A”的属性。当我把问题打印出来时,我开始慢慢意识到问题的答案,但我想不管怎么说,把它贴出来而不是删除它也无妨。我想我(或其他人)可能会从中学到一些东西。还有,isObject.create({})代码>创建对象的唯一方法?像Object.create(Object)这样的东西怎么样代码>?这有不同的效果吗?你能发布一些代码详细说明你是如何创建一个和它的子代的吗?不鼓励使用proto:根据您使用它的方式,我可以想出一些可能的答案。我正在创建一个viako.mapping.fromJSON
。我对proto的使用可能是令人沮丧的,我仍在学习p
var A = Object.create({});
A.foo; // undefined
Object.getPrototypeOf(A).foo = 'bar';
A.foo; // "bar"
A.fizz = {};
A.fizz.foo; // undefined
// but note that because fizz was made with {} we have
Object.getPrototypeOf(A.fizz) === Object.prototype; // true
// even though we made it so that
Object.getPrototypeOf(A) === Object.prototype; // false
// i.e. the only relation between them is the property reference