博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
笨办法理解原型链
阅读量:5899 次
发布时间:2019-06-19

本文共 1861 字,大约阅读时间需要 6 分钟。

hot3.png

关于原型链的文章之前写了一篇 

今天想用另一个视角再把原型链理解一遍,主要通过分析对象的__proto__属性和contructor属性反向理解原型链。

我分三层进行分析,第一层分析Object、Object.prototype及 由Object派生的对象实例。 

第二层分析自定义构造函数,及该构造函数原型对象,派生对象实例

第三层分析继承型的构造函数,及该构造函数原型对象,派生对象实例

 

第一层

构造函数Object 

__proto__属性 contructor属性
console.log("Object", Object);

console结果如下:

 

Object的原型对象Object.prototype

__proto__属性 contructor属性

指向构造函数Object
Object.prototype.constructor=Object

console.log("Object.prototype", Object.prototype);

 

对象实例 new Object()

__proto__属性 contructor属性

指向原型对象
a.__proto__=Object.prototype 
也就是
(new Object).__proto__=Object.prototype

 

var a = new Object();console.log("a", a);

 

第二层

自定义构造函数Dog

__proto__属性 contructor属性
function Dog(name) {      this.name = name;      this.type = 'Dog';    }    console.log("Dog", Dog);

console结果如下:

 

自定义构造函数Dog的原型对象Dog.prototype

__proto__属性 contructor属性

不知道指向哪里
猜测是指向到Object原型对象
Dog.prototype.__proto__=Object.prototype ?

指向构造函数Dog
Dog.prototype.constructor=Dog

console.log("Dog.prototype", Dog.prototype);

Dog对象实例 new Dog()

__proto__属性 contructor属性

指向原型对象
doggie.__proto__=Dog.prototype 
也就是
(new Dog).__proto__=Dog.prototype

即 (new Dog).__proto__.__proto__=Object.prototype

var doggie = new Dog("wangwang");console.log("new Dog", doggie);

 

对于通过对象字面量创建的对象链接到Object.prototype即   通过对象字面量创建的对象.__proto__=Object.prototype 这点和new出来的对象是不同的。

当你创建一个新对象时,你可以选择某个对象最为它的原型。以下代码给Object.create方法创建一个使用对象作为期原型的新对象。

if (typeof Object.beget !== 'function') {      Object.create = function (o) {        var F = function () {        };        F.prototype = o;        return new F();      };    }

下面给出一个使用的例子

var stooge = {      "first-name": "liu",      "last-name": "yi"    };var another_stooge = Object.create(stooge);

根据观察

stooge.__proto__ === Object.prototype

another_stooge.__proto__ === stooge
another_stooge.__proto__.__proto__ === Object.prototype

转载于:https://my.oschina.net/lilugirl2005/blog/1826056

你可能感兴趣的文章
createjs记录坑
查看>>
经典排序算法 - 珠排序Bead Sort
查看>>
PHP扩展安装之phpize
查看>>
第五周学习进度总结
查看>>
定位API的原理
查看>>
substing和slice的完整语义和区别
查看>>
[hadoop实战3]Hbase安装
查看>>
CNN卷积核反传分析
查看>>
python刷取CSDN博文访问量之三
查看>>
Exchange Server 2010部署(二)部署Exchange2010 客户端访问CAS和集线器传输HUB服务器...
查看>>
Python Web 框架,第 1 部分: 使用 Django 和 Python 开发 Web 站点
查看>>
Linux服务器的四种***级别
查看>>
shell if
查看>>
利用PDO导入导出数据库
查看>>
CentOS 6.5 部署redmine 2.42
查看>>
DDR3
查看>>
android 分享
查看>>
我的友情链接
查看>>
分支 统计字数
查看>>
艾级计算机的发展与挑战
查看>>