JavaScript原型链

js原型链

原型链是JS面向对象的基础非常重要

所有对象只有__proto__属性,而函数具有prototype属性,prototype中又存在constructor的属性指向该函数,在new操作时,调用constructor属性(ps:既然是指向自己,为什么不直接用自己?方便继承)

函数在构造对象时会为对象划分内存并将自己的值this.xxx的值复制到该对象的内存中,为了节约内存则使用了一个prototype的公共内存空间,方便该构造函数的所有对象共用,在对象查找属性时如果找不到则会调用__proto__指针来找到构造函数的prototype属性

image.png

你会发现函数本身也可以具有属性,所以函数是一个特殊的对象,因此也有js一切皆对象的说法。

面向对象的编程实现(OOP,Object Oriented Programming)

面向对象中对对象的属性的调用权限方式不同,在实现构造函数时,将属性划分为几类:1. 私有属性private 2.公有属性public 3.静态属性static

私有属性就是构造函数中普通的this.xxx属性
公有属性即prototype中的属性
静态属性是构造函数的属性

继承

// a继承b
function __() { this. constructor = A};
__.prototype = B.prototype;
A.prototype = new __();  // 此时A.prototype.__proto__ == __.prototype == B.prototype
// 1. new A()时会调用A.prototype.constructor,
// 2.当对象a查找属性时会先找a.__proto__ == A.prototype,A.prototype没有则找A.prototype.__proto__ == B.prototype

这就相当于只改变了A.prototype.__proto__的指向,即改变了公共空间的指向,继承了B的公有属性,同时A添加公共属性时不会影响到父级。

在es6中也可以直接a.__proto__ = b.prototype,直接继承,但是IE11以下不兼容

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在JavaScript中,原型链作为一个基础,老生长谈,今天我们就来深入的解读一下原型链。 本章主要讲的是下面几点...
    Devinnn阅读 1,426评论 1 6
  • 理解 javascript 的原型链及继承 以上所有的运行结果都是 true; 三种构造对象的方法: 通过对象字面...
    你期待的花开阅读 1,553评论 0 3
  • 原型链就是如下神图 通常继承与原型链是一并出现的 原型 原型链当然是原型组成的了。在JavaScript中,每个函...
    一个被写代码耽误的厨师阅读 294评论 0 0
  • 前言 JS是一门面向对象的语言,在js有一种说法,万物皆对象。本文将带领大家深入了解JS对象的原型及原型链。PS:...
    _玖柒_阅读 542评论 0 4
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,620评论 0 11