美文网首页HTML5
JavaScript原型链

JavaScript原型链

作者: 陌客百里 | 来源:发表于2021-05-10 05:18 被阅读0次

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】继承

    javascript只支持实现继承,而且继承主要是依靠原型链来实现的。 原型链 javascript将原型链作为实...

  • js原型、原型链、继承的理解

    一、原型、原型链 原型是Javascript中的继承的基础,JavaScript的继承主要依靠原型链来实现的。 原...

  • javaScript原型链

    javaScript原型链概念JavaScript之继承(原型链)数据结构var Person = functio...

  • 原型、原型链

    (什么是原型、原型链?有什么作用) JavaScirpt深入之从原型到原型链 图解 Javascript 原型链 ...

  • JavaScript 原型、原型链与原型继承

    原型,原型链与原型继承 用自己的方式理解原型,原型链和原型继承 javascript——原型与原型链 JavaSc...

  • javascript碎片知识001

    javascript中的对象(原型,原型链) 什么是原型? 原型是JavaScript中的继承的基础,JavaSc...

  • 面试题 Javascript

    介绍JavaScript的基本数据类型。 说说写JavaScript的基本规范? JavaScript原型,原型链...

  • JavaScript 基础知识点

    介绍JavaScript的基本数据类型。 说说写JavaScript的基本规范? JavaScript原型,原型链...

  • 原型和原型链篇

    原型和原型链 1.理解原型设计模式以及JavaScript中的原型规则 原型设计模式JavaScript是一种基于...

  • 原型链 完整版(JavaScript)

    原型链 完整版(JavaScript)

网友评论

    本文标题:JavaScript原型链

    本文链接:https://www.haomeiwen.com/subject/rdvinktx.html