prototype和__proto__直观区别

简介: prototype和__proto__直观区别

真正的prototype与__proto__的区别,在于prototype原始类设计者,也就是说,原始类设计人员需要对prototype进行一系列操作,而__proto__则是二次开发人员,比如我var app = new Vue(),我想要为Vue实例添加一个方法,就要用app.__proto__,而app.prototype只有尤雨溪才有权限去修改。


显式原型:prototype

隐式原型:__proto__


可以形象地抽象成2类人:


prototype:小白,个性张扬,飞扬跋扈,大张旗鼓,做事生怕天下人都不知道。

__proto__:老鸟,个性沉稳,深藏功名,暗度陈仓,做事最亲近的人都不告诉。

至于为什么,看了下文就能略知一二!


其实从字面意思就可以看出两者区别。


显式: 明显的,表现出来的,显示出来的,当前文件中肉眼可以看见的隐式: 隐藏的,没有表现出来的,隐藏起来的,当前文件中肉眼看不到的原型:原型是Javascript继承中的核心,通过对原型链从最上层向最下层进行查找,来实现方法的调用。写一个我最近遇到的例子来直观的理解:

html文件中的script:


/

var myProgressOne = new mProgress();
        var myClickCallback = function(params){
            console.log(params);
        }

创建新mProgress类需要的script:

var mProgress = function(){
        };
        mProgress.prototype = $.extend( new MCBASE(), {
                version:'0.0.1',
                template :'<div class="pg-group">' +
                        '</div>',
                defaultOption : {
                    'colors':[],
                    'data': [],
                },
              setDom: function( dom ){
                    this.wrap = this._setDom( dom );
                    if( !this.wrap ){
                        console.log('配置项缺失');
                        return false;
                    }
                },
              ...
         }


定义mProgress类时继承的类的script:

var MCBASE = function(){
           this.version = '0.0.1';
       };
       MCBASE.prototype = {
           _getMod : function( ){
               return this;
           },
           _setDom : function(  dom ){
               if( !dom || !dom.length ){
                   console.log('配置项缺失');
                   return null;
               }
           },
           _formateLargeData : function( largeData, fixed ){
           }
           ...
        };


此时的对象数据结构见下图,可以直观观察出prototype和__proto__的区别:

小白和老鸟,或者叫孙子和爷爷也可以。


image.png

相关文章
|
1月前
|
JavaScript 前端开发
__proto__和prototype的区别
`prototype`和`__proto__`虽然都与JavaScript的原型继承和对象关系密切相关,但它们的定义、所属对象、作用和功能等方面存在着明显的区别。理解它们之间的区别对于深入掌握JavaScript的面向对象编程和原型链机制非常重要
网易:所有的对象最终都会继承自 Object.prototype ? ——原型链(二)详细讲解!
网易:所有的对象最终都会继承自 Object.prototype ? ——原型链(二)详细讲解!
|
7月前
|
JavaScript 前端开发 开发者
【专栏】JavaScript 中的 prototype 和__proto__是关乎对象继承和属性查找的关键概念
【4月更文挑战第29天】JavaScript 中的 prototype 和__proto__是关乎对象继承和属性查找的关键概念。prototype 是函数属性,用于实现对象继承,方法和属性定义在其上可被所有实例共享。__proto__是对象属性,实现属性查找机制,当对象自身找不到属性时,会沿原型链向上查找。两者关系:__proto__指向构造函数的 prototype,构成对象与原型的桥梁。虽然 prototype 可直接访问,但__proto__由引擎内部维护,不可见。理解两者区别有助于深入学习 JavaScript。
97 1
|
自然语言处理 JavaScript 前端开发
JavaScript:深入理解原型语言,洞察__proto__与prototype之间的区别
JavaScript:深入理解原型语言,洞察__proto__与prototype之间的区别
376 0
Array.prototype.includes() 原型调用用法案例讲解
Array.prototype.includes() 原型调用用法案例讲解
120 2
|
JSON JavaScript 前端开发
学习javaScript必知必会(6)~类、类的定义、prototype 原型、json对象
学习javaScript必知必会(6)~类、类的定义、prototype 原型、json对象
151 0
学习javaScript必知必会(6)~类、类的定义、prototype 原型、json对象
ES6—07:构造函数与原型对象、对象原型三者关系图解
ES6—07:构造函数与原型对象、对象原型三者关系图解
145 0
ES6—07:构造函数与原型对象、对象原型三者关系图解
|
JavaScript
原型和原型链 prototype和proto的区别
原型和原型链 prototype和proto的区别
230 0
|
JavaScript 前端开发
彻底深刻理解js原型链之prototype,__proto__以及constructor(二)
这篇教程主要目的对原型链概念进一步加深理解
彻底深刻理解js原型链之prototype,__proto__以及constructor(二)
|
JavaScript 前端开发
彻底深刻理解js原型链之prototype,__proto__以及constructor(一)
以下概念请花费一定的时间彻底理解,才能进行下一步,思考题一定要思考,这样才能彻底掌握原型链的知识点,教程中如果有任何的错误不足请指正!
24221 0
彻底深刻理解js原型链之prototype,__proto__以及constructor(一)