zoukankan      html  css  js  c++  java
  • 原型和原型链

    一切皆对象

    每个函数都有一个属性叫做prototype。

    这个prototype的属性值是一个对象(属性的集合,再次强调!),默认的只有一个叫做constructor(构造函数)的属性,指向这个函数本身。

    Object的原型:

    通过如下方法可以添加Prototype的属性

       function Fn() { }
            Fn.prototype.name = '白十三';
            Fn.prototype.getYear = function () {
                return 1997;
            };
    function Fn() { }
            Fn.prototype.name = '白十三';
            Fn.prototype.getYear = function () {
                return 1997;
            };
    
            var fn = new Fn();
            console.log(fn.name);
            console.log(fn.getYear());

    Fn是一个函数,fn对象是从Fn函数new出来的,这样fn对象就可以调用Fn.prototype中的属性。

    因为每个对象都有一个隐藏的属性——“__proto__”,这个属性引用了创建这个对象的函数的prototype。即:fn.__proto__ === Fn.prototype

    每个对象都有一个__proto__,可成为隐式原型。

     

    每个对象都有一个__proto__属性,指向创建该对象的函数的prototype。

    是Object.prototype确实一个特例——它的__proto__指向的是null,切记切记!

    一个对象要么是类似于 new Fn()出来的要么是new Object()创建出来的,所以对象的_proto_都会指向 Fn.prototype或者Object.prototype。

    自定义函数的prototype本质上也是对象,就是和 var obj = {} 是一样的,都是被Object创建,所以它的__proto__指向的就是Object.prototype。

    函数也是一种对象,函数当然也有__proto__

    函数也不是从石头缝里蹦出来的,函数也是被创建出来的。谁创建了函数呢?——Function——注意这个大写的“F”。

    以上代码中,第一种方式是比较传统的函数创建方式,第二种是用new Functoin创建。

    首先根本不推荐用第二种方式。

    这里只是向大家演示,函数是被Function创建的

    Function也是一个函数,函数是一种对象,也有__proto__属性。既然是函数,那么它一定是被Function创建。所以——Function是被自身创建的。所以它的__proto__指向了自身的Prototype。


    总结:

    每个函数都有一个属性叫做prototype。

    对象是被函数创建的,对象都有__proto__属性,指向创建了该对象的函数的prototype。

    函数一定是被Function创建的,函数也是对象,对象都有__proto__属性,函数的__proto__属性,指向Function的prototype。

    prototype也是对象,都是被Object创建,所以它的__proto__指向的就是Object.prototype。

    Object.prototype的_proto_指向null

    Function是被自身创建的,所以它的__proto__指向了自身的Prototype。

  • 相关阅读:
    汉堡博客
    复利计算——结对1.0
    《构建之法》第4章读后感
    Compound Interest Calculator4.0
    实验一 命令解释程序的编写
    Compound Interest Calculator3.0续
    1203正规式转换为有穷自动机
    优缺点评价
    语文文法
    词法分析实验总结
  • 原文地址:https://www.cnblogs.com/JhonFlame/p/8022966.html
Copyright © 2011-2022 走看看