对象,构造器函数,和原型对象
文章的由来
学习JS中,想要全面掌握面向对象程序的设计风格,对象模型(原型和继承),是其中的重点和难点,拜读过各类经典数据和各位前辈的技术文章,感觉太过高深,花了不少时间才搞明白 。个人智商是硬伤 /(ToT)/~~
基本概念
- 1.对象:属性和方法的集合(变量个函数的分装)。每个对象都有一个__proto__属性,指向这个对象构造函数的原型对象。
- 2.构造函数:用于创建对象的函数,通过new关键字生成对象,构造函数的首字母一般大写
- 3.原型对象:每个函数都有一个prototype属性,它是指向原型对象的指针(原型对象在定义函数时同时被创建)
创建对象的方法
- 使用构造函数个原型共同创建对象
function Person(name,age,job){//构造器函数
this.name = name;
this.age = age;
this.job = job;
}
Person.prototype = {
constructor: Person,//修正constructor指向问题
sayName: function(){
console.log(this.name)
}
}
var person1 = new Person("TOM",29,"teacher")//实例化对象person1
console.log(person1)
//{age: 29 ,job: "teacher",name: "TOM",__proto__:object}
//其中object指向的就是原型对象:Person.prototype指向的对象
var person2 = new Person("Jack","18","students")//
如上图构造器函数Person(),通过new关键字创建了两个实例化对象p1和p2,这两个对象都继承了来自构造函数Person()的prototype属性所指向的原型对象,
- 仅使用原型对象创建
var Person = {name:"william"}//这个对象当成原型
var p1 = Object.create(Person)//生成实例对象
console.log(p1.name)//william 相当于p1.__proto__.name
如上图使用,Object.create()方法从原型对象上直接生成新的实例对象,新的对象p1继承了原型对象的属性和方法,但是这里没有用到构造函数。
敲黑板(笔记本记来 ,考试要考)
我们可以理解 构造函数是妈妈,原型对象是爸爸,实例对象是孩子,妈妈让孩子拥有私有能力。爸爸让他们拥有共有能力~~(这个共有能力其实都是爸爸代劳的 2333…)~~ 在没有使用构造函数的情况下,可以理解为克隆