__proto__和prototype的一些发现
来源:互联网 发布:路由器测试软件 编辑:程序博客网 时间:2024/05/22 17:34
首先记一些总结,任何一个对象在构造时都会有自动创建一个__proto__属性,同时这个对象不一定会有prototype属性。
为什么说不一定‘会有’,而不是不一定会‘自动创建’,是因为prototype属性的存在和用户代码的结构有关,即:如果创建的对象有构造器,那么就会有prototype属性,
如果没有构造器则没有prototype属性。下面我说明一下怎样创建的对象算是有构造器的,怎样是没有构造器的。
创建一个具有构造器的对象:
var Person1 = function () {};
function Person2 () {};
console.log(Person1.prototype);
console.log(Person1.__proto__);
console.log(Person2.prototype);
console.log(Person2.__proto__);
会依次看到:
Object{}
function()
也就是说,Person1.prototype和Person2.prototype都指向了自身.
但是其中有些疑点,Person2.prototype打印的是Person2{},Person1.prototype打印的为什么不是Person1{}呢。
这又扯到了俩种function定义的区别:var Person1 = function () {},这句话首先会在栈内存创建一个变量Person1={},然后给Person1引用堆中的一片内存,然后在引用的堆内存中建立一个瞎名function。
function Person2 () {},这句话则会直接在堆内存中的静态空间中创建一个名为Person2的function。
Function是顶级的构造器,Object.prototype是顶级的原型链。 也就是说:
一、Object.__proto__ === Function.__proto__ === Function.prototype === Function.constructor.__proto__ === Function.constructor.prototype
五者都指向同一块内存域,域内值为function Function () {}.
二、Object.prototype === Function.__proto__.__proto__ === Function.prototype.__proto__ 三者都指向同一块内存域,域内值为function Object () {};
它们三者不再拥有属性prototype 和 __proto__,而只拥有一个constructor的属性。
同时说明了Function的__proto__ 属性和prototype属性是继承自Object的.
三、Object.prototype.constructor === Object,
Object.prototype.constructor.prototype === Object.prototype;值为function Object () {};
Object.prototype.constructor.__proto__ === Object.__proto__;值为function Function () {}.
顶级原型链Object.prototype的唯一子属性constructor等于Object自己.
四、Object.constructor === Function.constructor;都为function
Object的构造器(Object.__proto__)是function Function () {}, Function 的构造器(Function.__proto__)也是function Function () {};
Object的原型(Object.prototype)是function Object () {}, Function 的原型(Function.prototype)是function Function () {};
- __proto__和prototype的一些发现
- 关于__proto__和prototype的一些理解
- 关于__proto__和prototype的一些理解
- Javascript 中的 __proto__ 和 prototype 的一些理解
- JS的prototype和__proto__
- __proto__ 和 prototype的异同
- JS的prototype和__proto__
- JS的prototype和__proto__
- JS的prototype和__proto__
- JS的prototype和__proto__
- prototype和__proto__的概念
- JS的prototype和__proto__
- JS的prototype和__proto__
- JS的prototype和__proto__
- prototype和__proto__的区别
- JS的prototype和__proto__
- JS的prototype和__proto__
- 关于__proto__和prototype的理解
- IOS开发NSDateFormatter格式详细列表一览
- Python 抽象工厂方法
- cocos2d-x 截图的方法
- 测试多线程下载的java类
- vs2010调试崩溃 reflector
- __proto__和prototype的一些发现
- 代码面试最常用的10大算法
- skia库显示中文的问题
- 配置文件读取和写入类
- jsonc的基本使用
- linux 启动MySQL服务
- Oracle start with..Connect By prior..用法实例讲解
- OCP 1Z0 051 59
- Android复杂自定义Listview实现