美文网首页
JavaScript--原型、原型链

JavaScript--原型、原型链

作者: 阿毛啊726 | 来源:发表于2020-06-07 09:05 被阅读0次

任何函数都有一个prototype方法,指向这个函数的原型对象(默认是Object空对象),原型对象中有一个属性constructor指向函数对象

function F() {
        this.test1=function () {
            console.log("test1");
        }
    }
console.log(F.prototype.constructor == F); //true

每一个实例对象都有一个proto方法,同样指向函数的原型对象

    var fn=new F()
    console.log(F.prototype);//{constructor: ƒ}
    console.log(fn.__proto__);//{constructor: ƒ}
    console.log(F.prototype == fn.__proto__);//true

显示原型和隐式原型
函数的prototype为显示原型console.log(F.prototype)
实例对象的proto为隐式原型console.log(fn.__proto__)

    console.log(fn.__proto__.__proto__);//F的原型对象实际上是一个 object的实例对象,所以他也有__proto__,到object的原型对象

原型链

原型链是用来查找属性的,查找过程中是按照隐式原型链走。从实例对象开始查找,没有则进入原型对象,没有则进入原型对象的原型对象(函数的原型对象是一个Object的实例对象),最终找到object的原型对象
object的原型对象的proto为null

console.log(Object.prototype.__proto__);//null

所有函数的proto都是相同的,都指向Function的原型函数
因为所有的函数构造过程如下

function F(){}
//等价于
var F=new Function()
//创建了一个Function构造函数的实例对象
        function F() {        };
        function W() {        };
        function Z() {        };
        console.log(F.__proto__ == W.__proto__);//true
        console.log(F.__proto__);//ƒ () { [native code] }
        console.log(W.__proto__);//ƒ () { [native code] }
        console.log(Z.__proto__);//ƒ () { [native code] }

F.proto ==W.proto==Z.proto==Function的原型对象
对于Function,Function的prototype和proto相等,都指向Function的原型对象:
Function函数的生成过程
var Function=new Function()
Function本身是一个构造函数,同时它又是Function的实例对象
因此

console.log(Function.prototype == Function.__proto__); //true

Object 是Function的一个实例,因此

    console.log(Object.__proto__ == Function.__proto__);//true
    console.log(Object.__proto__ == Function.prototype);//true
    console.log(Object.prototype.__proto__);//null
       function F() {

        };
        Object.prototype.a=function () {
            console.log("a()");
        };
        Function.prototype.b=function () {
            console.log("b()");
        };
        var f=new F();
        console.log(f.a);//a()的函数
        console.log(f.b);//undefinde
        console.log(F.a);//a()的函数
        console.log(F.b);//b()的函数

相关文章

  • JavaScript--原型、原型链

    任何函数都有一个prototype方法,指向这个函数的原型对象(默认是Object空对象),原型对象中有一个属性c...

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

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

  • 原型、原型链

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

  • 关于原型原型链的理解

    什么是原型? 什么是原型链? 为什么需要原型,和原型链?

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • 原型链&查找规则&作用域链

    原型链(隐式原型链) 属性的查找规则(原型链的查找规则) 作用域链

  • 【原型和原型链】什么是原型和原型链

    【原型和原型链】什么是原型和原型链https://blog.csdn.net/xiaoermingn/articl...

  • js原型链

    目录 1.对象的原型和原型链1.1什么是原型1.2查看原型1.3对象的原型链 2.使用构造函数2.1 函数的原型链...

  • 原型链实现继承

    原型链 原型链示意图 使用原型链实现继承 这是怎么回事呢? 原型链在哪? 听我细细道来~ 首先 Teacher 实...

  • js中的实现继承的几种方式

    大纲:原型链借用构造函数组合继承原型式继承寄生式继承寄生组合式继承 1、原型链: 什么是原型链? 原型链的基本思想...

网友评论

      本文标题:JavaScript--原型、原型链

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