• JavaScript原型链的理解


    在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象。__proto__,每个对象(除null外)都会有的属性,这个属性会指向该对象的原型。获得对象的原型的方法,ojb.getPrototypeOf(obj)

    person.__proto__ === Person.prototype === Object.getPrototypeOf(person)

    原型:每一个javascript对象(除null外)创建的时候,就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型中“继承”属性。每个原型都有一个constructor属性,指向该关联的构造函数。

    Person===Person.prototype.constructor

    当获取 person.constructor 时,其实 person 中并没有 constructor 属性,当不能读取到constructor 属性时,会从 person 的原型也就是 Person.prototype 中读取,正好原型中有该属性,所以:

    person.constructor === Person.prototype.constructor

    当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。

    Object.prototype.__proto__ = null

    person.name => person.__proto__.name => Person.prototype.name => Person.prototype.__proto__.name => Object.name

     简单的回顾一下构造函数、原型和实例的关系:每个构造函数Person()都有一个原型对象Person.prototype,原型对象Person.prototype都包含一个指向构造函数的指针Person.prototype.constructor,而实例person都包含一个指向原型对象的内部指针person.__proto__。那么假如我们让原型对象Person.prototype等于另一个类型的实例son,结果会怎样?显然,此时的原型对象Person.prototype将包含一个指向另一个原型Son.prototype的指针son.__proto__,相应地,另一个原型Son.prototype中也包含着一个指向另一个构造函数Son()的指针Son.prototype.constructor。假如另一个原型Son.prototype又是另一个类型的实例game,那么上述关系依然成立。如此层层递进,就构成了实例与原型的链条。这就是所谓的原型链的基本概念。——摘自《javascript高级程序设计》

    以上个人理解,原文博客链接:https://www.cnblogs.com/loveyaxin/p/11151586.html


    简单举例。

    function Tom()
    {
        public myName = "tom";
        function log()
        {
            console.log(tom.myName);
        }    
    }
    var tom = new Tom();
    //tom是实例,tom。myName修改了实例属性
    tom.myName = "jerry";
    console.log(tom.myName)
    //这里修改了原型的myName属性
    tom.prototype.myName = "jerry";
    console.log(tom.myName);
    Tom.log()
  • 相关阅读:
    spring mvc EL ModelAndView的 Model 值 在jsp中不显示
    maven修改本地仓库,远程仓库与中央仓库
    Maven 手动添加 JAR 包到本地仓库
    Maven项目的结构分析
    Maven 构建配置文件
    SVN使用出现的问题及解决方案
    Eclipse中SVN的安装步骤(两种)和使用方法
    Eclipse SVN 使用教程
    svn使用教程总结
    eclipse下配置安装ssm图文教程(web版)
  • 原文地址:https://www.cnblogs.com/chickenfarm/p/12574019.html
Copyright © 2020-2023  润新知