• 如何彻底弄懂原型


    带你彻底了解原型

    官方解释:对于使用过基于类的语言 (如 Java 或 C++) 的开发人员来说,JavaScript 有点令人困惑,因为它是动态的,并且本身不提供一个 class 实现。(在 ES2015/ES6 中引入了 class 关键字,但那只是语法糖,JavaScript 仍然是基于原型的)。

    当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象( object )都有一个私有属性(称之为 proto)指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象( proto) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。

    几乎所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。

    尽管这种原型继承通常被认为是 JavaScript 的弱点之一,但是原型继承模型本身实际上比经典模型更强大。例如,在原型模型的基础上构建经典模型相当简单。

    JavaScript 对象是动态的属性“包”(指其自己的属性)。JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。

    函数类型

    • 普通函数
    • 构造函数(类:内置类和自己创建的类)

    对象类型

    • 普通对象
    • Math
    • JSON ...
    • 类的实例(数组,正则,日期...)
    • prototype 或者 proto
    • arguments 或者元素集合等类数组
    • 函数也是一种对象
    • 万物皆对象 ....

    了解原型的三句话

    • 每一个函数(类) 都有一个Prototype(原型属性),属性值是一个对象,这个对象存储类当前类供实例调取的公有属性和方法
    • 在浏览器默认的给原型开辟的堆内存中有一个属性constructor,存储的是当前类的本身。
    • 每一个对象(实例)都有一个proto(原型链)属性。这个属性指向当前实例所属类的原型(不确定所属的类,都指向Object.prototype)

    注意 Object是Js中内置的基类(最底层类),在他的原型上proto的值为null:不为null也是指向自己。

    function Fn(){
        this.x = 100;
        this.y = 200;
        this.getX = function(){
            console.log(this.x);
        }
    }
    Fn.prototype.getX = function(){
        console.log(this.x);
    }
    Fn.prototype.getY = function(){
        console.log(this.y);
    }
    var f1 = new Fn;
    var f2 = new Fn;
    

    最重要的一张图

  • 相关阅读:
    【QTP小技巧】02_QTP中Complete Word 实现(转载)
    【QTP专题】04_对象及操作方法
    【QTP专题】03_Add-in Manager插件
    【QTP专题】02_时间同步点问题
    loadrunner 11问题汇总
    system idle process
    html div四边阴影效果
    通过CSS实现 文字渐变色 的两种方式
    UIgradients – 美丽的UI渐变色分享站 并可转成CSS代码
    display:inline-block带来的问题及解决办法
  • 原文地址:https://www.cnblogs.com/yaogengzhu/p/10995497.html
Copyright © 2020-2023  润新知