首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript原型对象

javascript原型对象
EN

Stack Overflow用户
提问于 2013-01-31 03:40:10
回答 3查看 399关注 0票数 1

1.

代码语言:javascript
复制
function MyConstructor() {}
var myobject = new MyConstructor();
MyConstructor.prototype = {protest:"maizere"};

[ myobject instanceof MyConstructor,     // false !
myobject.constructor == MyConstructor, // true !
myobject instanceof Object ]           // true
console.log(myobject.protest)          //undefined

这证明了我的对象不再继承MyConstructor原型的属性和方法。

但请参阅下面的代码:

代码语言:javascript
复制
function MyConstructor() {}
var myobject = new MyConstructor();
MyConstructor.prototype.protest= "Maizere";//Do this line gets hoisted?or something else

[ myobject instanceof MyConstructor,     // true!
myobject.constructor == MyConstructor, // true !
myobject instanceof Object ]           // true
console.log(myobject.protest)          //Maizere

为什么会发生这种情况?内部原型的确切定义是什么?这也证明了即使在对象实例化之后,proto也引用了MyConstructor prototype.If,而不是第一个(1)。没有引用MyConstructor原型的代码?由于属性是在第二段代码中的对象实例化之后添加的,并且对象的内部原型接收到了该属性,这意味着我们可以在稍后更改原型属性,并且仍然可以在实例.But中看到相同的定义在替换第一个代码中的原型属性时不起作用?

EN

回答 3

Stack Overflow用户

发布于 2013-01-31 03:48:21

我可能错了,但当你这么做的时候:

代码语言:javascript
复制
MyConstructor.prototype = {protest:"maizere"};

您正在使用匿名对象定义重写原型,因此,当您添加一个新属性时,如下所示:

代码语言:javascript
复制
MyConstructor.prototype.protest= {"Maizere"};

你的班级保持它的原型,它的工作就像一个魅力。

票数 1
EN

Stack Overflow用户

发布于 2013-01-31 03:48:56

MyConstructor.prototype =覆盖整个prototype对象。

instanceof运算符测试对象的原型链中是否包含构造函数的prototype属性。

http://jsfiddle.net/ExplosionPIlls/xtqhp/

代码语言:javascript
复制
function MyConstructor () {}
MyConstructor.prototype = {'xyz': 'zyx'};
//true
console.log((new MyConstructor) instanceof MyConstructor);

function MyConstructor2 () {}
var mc2 = new MyConstructor2;
MyConstructor2.prototype = {'xyz': 'zyx'};
//false
console.log(mc2 instanceof MyConstructor2);

顺便说一下,MyConstructor.prototype.protest = {"Maizere"};不是有效的语法。

票数 0
EN

Stack Overflow用户

发布于 2013-01-31 03:50:01

因此,这是我将这篇文章标有书签的原因之一:

构造函数被认为有点混乱

基本上,在第一个代码块中发生的是用一个新对象覆盖MyConstructor的原型对象。然而,在第二个块中,您要向现有prototype对象添加一个属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14618046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档