javascript – 构造函数和原型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 构造函数和原型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2511字,纯文字阅读大概需要4分钟。
内容图文
有人可以解释一下吗?
function Foo() {
this.x = 1;
this.y = 2;
}
function FooProto() {
this.arrow = 1;
this.bow = 1;
}
document.writeln(Foo.prototype); // [object Object]
document.writeln(Foo.prototype.constructor); // function Foo() { x =1; y=2; }
我的理解是:Foo.prototype是一个Object,其构造函数属性是Function Foo. Foo.[[Prototype]]是Function.Prototype
obj = new Foo;
document.writeln(obj.constructor); // function Foo() { x =1; y=2; }
document.writeln(obj.constructor.prototype); // [object Object]
Foo.prototype = FooProto;
document.writeln(Foo.prototype); // function FooProto() { arrow = 1; bow = 2; }
document.writeln(Foo.prototype.constructor); // function Function() { [native code] }
问题1:如何使用[[Prototype]]进行查找.如果有人能向我解释,我将不胜感激.
document.writeln(obj.constructor); // function Foo() { x =1; y=2; } .. no change
document.writeln(obj.constructor.prototype); // function FooProto() { arrow = 1; bow = 2; }
anotherObj = new Foo;
document.writeln(anotherObj.constructor); // function Function() { [native code] }
document.writeln(anotherObj.constructor.prototype); // function Empty() {}
问题2:与问题1相同的问题.Javascript解释器是如何执行查找的?
解决方法:
在解释基于原型的代码时,使用Object.create来解释内容要简单得多. Object.create是一个函数,它接收一个原型对象并创建一个新的实例对象,该对象将原型对象作为其[[prototype]]
在对象中查找属性时,工作方式如下:
每个对象都有自己的,不可变的[[prototype]]属性.这个属性是秘密和隐藏的,除非你在Firefox中,你可以通过__proto__获取它.
在读取属性时,我们首先在对象本身中搜索它,如果我们在那里找不到它,我们递归搜索对象的[[prototype]].
在编写属性时,我们总是编写一个自己的属性(我们永远不会改变[[prototype]],即使它也具有我们正在设置的属性).
proto = {a:1};
child1 = Object.create(proto);
child2 = Object.create(proto);
child1.a = 2;
console.log(proto.a); //1
console.log(child1.a); //2
console.log(child2.a); //1
创建功能时
每当我们在Javascript中创建一个函数对象时,它都会附带一个已经填充的prototype属性.这个原型是一个对象(继承自Object.prototype)并且将构造函数属性设置为相应的函数.
使用函数构造函数实例化对象时(new Foo)
使用函数prototype作为其[[prototype]]创建一个新对象,并在该对象上运行该函数以初始化它.
>我真的不想解释第一种情况发生了什么,因为
Foo.prototype = FooProto;部分没有意义,可能不是你想做的(记住原型应该是对象,而不是函数)
>对于第二种情况,更改构造函数的prototype属性只会影响将来的实例(anotherObj).已创建对象的[[prototype]]属性是秘密且不可变的,因此您无法更改它们.
>请注意,如果要动态更改原型和现有对象(猴子修补),可以通过在现有原型对象中编写和覆盖值而不是用新的替换它来实现.
内容总结
以上是互联网集市为您收集整理的javascript – 构造函数和原型全部内容,希望文章能够帮你解决javascript – 构造函数和原型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。