对于面向对象的一点理解

对于面向对象,我的理解是第一先构造函数,第二往这个构造函数自带的prototype属性里添加属性,第三,new这个函数创建一个对象,然后使用这个对象里的属性,下面就详细来理解一下~

  1. 声明函数
function home(name){
    this.name = name
}

这时这个构造函数里还会出现一个prototype的属性,这是每个函数都自带的属性;

  1. 向这个函数的prototype属性添加你所需要的属性
home.prototype.baba = function(){console.log(`我是${this.name}`)}
  1. 创建一个对象,即new这个构造函数,那么这个对象的_proto_属性就被设置为这个构造函数的prototype的属性了(因为对象本身就具有_proto_属性,new home时,_proto_就成为home.prototype;new people时,_proto_就成为people.prototype
var h = new home('a')
h.baba() // 'a'
image.png
  • 当new一个函数时,会发生什么呢?
    ①创建一个空对象,把这个空对象的_proto_属性设置为这个函数的prototype
    ②执行这个函数,此时这个函数里面的this代表刚刚创建的这个新对象
    ③返回这个对象,如果构造函数中有return,return的是基本类型的话就忽略不计,但是return的是引用类型(对象、数组之类的),那么就返回这个引用类型,不过应该也没有人无聊到在构造函数里return东西出来

记住:函数本身有prototype属性,对象本身有_proto_属性,函数的prototype属性对应的值是一个对象,叫做原型对象,这个原型对象可以被这个函数new出来的所有对象共享

有了这个原型之后,我们可以把用到的属性都写到这个原型中,每次只需创建不同的对象,这两个对象虽然功能都一样,但却是完全独立的两个组件,这就是组件化

  • 原型图


    原型图.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如果提前了解你要面对的人生,你是否还会有勇气前来? 来到地球的我们,其实都是勇敢的小灵魂,在来之前我们都想要体验不...
    M温暖的初夏阅读 3,535评论 4 2
  • (一) 有一个故事大家耳熟能详。 一个老头和一个小孩,用一头驴驮着货物去赶集。在回家的路上,孩子骑在驴上,老头儿跟...
    simoo阅读 3,452评论 0 0