美文网首页
javaScript原型链

javaScript原型链

作者: 魔王哪吒 | 来源:发表于2020-04-29 17:24 被阅读0次

    javaScript原型链
    概念
    JavaScript之继承(原型链)
    数据结构
    var Person = function(){}; Person.prototype.type = 'Person'; Person.prototype.maxAge = 100;
    分支主题
    prototype(原型)
    constructor(构造方法)
    Person.prototype.constructor === Person;
    自己的构造,指向自己. 无限循环
    proto(原型链)
    Person.prototype.proto === Object.prototype
    指向Object对象prototype(原型)
    proto(原型链/遗传进化链)
    第一层指向,Function对象prototype(原型)
    分支主题
    Person.proto === Function.prototype
    同时Function对象的proto(原型链)也指向Function的prototype(原型)
    Function.proto === Function.prototype
    第二层指向,Object对象prototype(原型)
    分支主题
    Person.proto.proto === Object.prototype
    第三次指向,null
    Person.proto.proto.proto === null
    var p = new Person(); console.log(p.maxAge); p.name = 'rainy';
    分支主题
    实例对象没有prototype原型属性
    仅具有proto(原型链)
    第一层指向,Person对象prototype(原型)
    new Person().proto === Person.prototype
    第二层指向,Object对象prototype(原型)
    new Person().proto.proto == Object.prototype
    第二层指向,还等同Person对象的第二层指向
    new Person().proto.proto === Person.proto.proto
    第三次指向,null
    new Person().proto.proto.proto === null
    prototype、proto的关系
    dir(Array)
    分支主题
    dir(new Array())
    new Array().proto === Array.prototype
    true
    Array.prototype
    分支主题
    Array.
    分支主题
    可访问form直接方法
    也可访问Array.proto内方法
    也可访问Array.proto.proto.... 内方法[继承]
    检验是否非进化链proto继承的属性
    分支主题
    .hasOwnProperty("")
    构造指向自己
    Array.prototype.constructor === Array
    true
    Array.prototype.constructor.prototype.constructor.prototype.constructor ....
    function Array() { [native code] }
    proto
    分支主题
    遗传进化链 or 进化链指针
    进化链指针
    new String().proto === String.prototype
    JS内置构造器和自定义函数都是Function构造器的原型(prototype)
    Array.proto === Function.prototype
    true
    String.proto === Function.prototype
    true
    Function.proto === Function.prototype
    true
    只有Function.prototype是函数(function)类型
    分支主题
    为了保证函数构造器们的proto指向的都是函数
    不能new的目标
    分支主题
    没有构造函数(不是函数),不能new
    分支主题
    分支主题
    function才有构造,object没有
    继承控制
    Object
    Object.setPrototypeOf(child, parent);
    Object.prototype.extend
    class
    class Porsche extends Car
    function
    inherits(Chinese, People) & People.call(this, name, age)
    inherits(Chinese, People)
    分支主题
    分支主题
    分支主题
    作用
    child.prototype = Object.create(parent.prototype)
    通过prototype的覆盖获得parent所有的数据结构
    注意,覆盖会造成自身数据结构的丢失
    如需自定义数据结构需要在inherits()后赋予
    People.call(this, name, age)
    分支主题
    分支主题
    作用
    调用call,使用当前this(English)执行People函数
    构造 Constructor
    声明对象
    分支主题
    实例对象
    分支主题

    相关文章

      网友评论

          本文标题:javaScript原型链

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