面向对象的总结

孤街浪徒 提交于 2020-03-09 00:34:58

其实面向对象是一种编程思想,不用想的太复杂,可以想这个问题,把大象放进冰箱需要几步?面向的对象是什么,就是:打开冰箱放进大象关上冰箱,而面向过程就是这个事件的步骤,分步骤一步步实现,这就是面向过程。
需要实现拿出大象,只需要把“放进” 修改成“拿出”的步骤就可以了。
这就是面向过程,面向对象就是整个事件。
1.关键字createPerson和prototype以及__proto__
原型对象的作用和语法

function createPerson(){
        
    }
	createPerson.prototype.name = "admin";
    createPerson.prototype.show = function(){
        console.log("hello");
    }
    
    console.log(createPerson.prototype); 
	var p1 = new createPerson();
    console.log(p1);
    
    console.log(p1.__proto__);

最后会发现__proto__身上也能找到prototype添加的属性和方法。由此可以证明

createPerson.prototype 这个就叫原型对象。
那这个到底有什么用呢?首先要清楚原型对象也是一个对象,也可以向这个原型对象添加属性和方法。
而添加到原型对象身上的属性和方法并不是给函数用,而是给将来被new出来的实例的隐式原型使用。
p1.__proto__就是p1的隐式原型。
实例身上的隐式原型,是为了标记当前实例的来源函数的原型对象。
那么就可以得出

p1.__proto__ == createPerson.prototype

他们两个之间是一样的。
实例和类之间的关系就是这样子。
通过new得到的对象,也叫实例
被new执行的构造函数,也叫类

 实例是类的具象化
 类是实例的抽象化
如果有点难懂,可以看一下我上面举得那个例子:实例就是大象关进冰箱,类就是实现这个事件的步骤。这样就很好理解了。

接下来就是总结他们之间的关系了,他们之间的关系就是原型链。

 一般情况下,一个对象类型的数据,必然会有一个隐式原型,这个隐式原型作为当前对象的父级存在
         当前对象属性或方法的读写规则
             读(获取)
                 如果一个对象不具有某个属性或方法,会顺着隐式原型找父级,找到了,可以直接使用,找不到,继续顺着隐式原型向上找父级,找不到,一直向上,直到顶端的Object,如果还是没有,那么抛出undefined,只要在某一层找到了,那么就停止
                     子无,找父,父无,找父之父,......
                     全无,undefined
                     某处找到,即停止
             写(设置)
                 不往上找,直接写在当前位置,不会向上设置
                 只能改写自身,不能改写父级

既然叫原型链肯定有图片的啦,接下来看一下图片就可以知道他们之间的关系了。在这里插入图片描述
其实那个constructor是一个补充,并不是必须要通过constructor。
只是如果你不知道是指向哪个构造函数时,可以用他来知道。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!