zoukankan      html  css  js  c++  java
  • prototype和__proto__的区别

    1.每个对象都具有一个名为__proto__的属性;

    2.每个构造函数(构造函数标准为大写开头,如Function(),Object()等等JS中自带的构造函数,以及自己创建的)都具有一个名为prototype的方法(注意:既然是方法,那么就是一个对象(JS中函数同样是对象),所以prototype同样带有__proto__属性);

    3.每个对象的__proto__属性指向自身构造函数的prototype;

    // 创造一个函数Fun,这个函数由Function这个构造函数生成
    function Fun(){} 
    // 这个函数由Fn生成,这样Function,Fun,fn就构成了原型链
    var fn = new Fun()

    // fn的__proto__指向其构造函数Fun的prototype
    console.log(fn.__proto__===Fun.prototype); // true
    // 类似上面的
    console.log(Fun.__proto__===Function.prototype);//true
    // Function的__proto__指向其构造函数也就是自己本身的prototype
    console.log(Function.__proto__===Function.prototype);//true
    // Function.prototype(也是一个对象)的__proto__指向其构造函数Object的prototype
    console.log(Function.prototype.__proto__===Object.prototype);//true
    // 类似上面的
    console.log(Fun.prototype.__proto__===Object.prototype);//true
    // Object作为一个构造函数,他的__proto__也是指向Function.prototype
    console.log(Object.__proto__===Function.prototype);
    // Object.prototype作为一切的源头,他的__proto__是null
    console.log(Object.prototype.__proto__===null);//true

    constructor在原型链中,是作为对象prototypr的一个属性存在的,它指向构造函数

    var obj = {}
    console.log(obj.__proto__===Function.prototype);//false
    console.log(obj.__proto__===Object.prototype);//true
    // obj的构造函数直接指向Object
    console.log(obj.__proto__.constructor===Object);//true
    // Object的__proto__指向Function的prototype
    console.log(obj.__proto__.constructor.__proto__===Function.prototype);//true
    // Function.prototype.__proto__指向Object的prototype
    console.log(obj.__proto__.constructor.__proto__.__proto__===Object.prototype);//true
    // Object.prototype.__proto__为空
    console.log(obj.__proto__.constructor.__proto__.__proto__.__proto__===null);//true
    console.log(obj.__proto__.constructor.__proto__.__proto__.constructor.__proto__===Function.prototype);//true

  • 相关阅读:
    js,h5页面判断客户端是ios还是安卓
    jQuery中没有innerHtml和innerText
    一个导航动画
    o'Reill的SVG精髓(第二版)学习笔记——第十二章
    o'Reill的SVG精髓(第二版)学习笔记——第十一章
    o'Reill的SVG精髓(第二版)学习笔记——第十章
    o'Reill的SVG精髓(第二版)学习笔记——第九章
    o'Reill的SVG精髓(第二版)学习笔记——第八章
    o'Reill的SVG精髓(第二版)学习笔记——第七章
    原生html、js手写 radio与checkbox 美化
  • 原文地址:https://www.cnblogs.com/haoqirui/p/13699907.html
Copyright © 2011-2022 走看看