构造和函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new一起使用。我们可以吧对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
在js中,使用构造函数要注意俩点
1:构造函数用于创建某一类对象,其首字母要大写;
2:构造函数要和new 一起使用才有意义
构造函数在new的时候所做的事情
function Start(uname,age){
this.uname=uname;
this.age=age;
this.all=function(){
console.log('全部的我');
}
}
var ldh=new Start('ldh',18);
var zxy=new Start('zxy',28);
ldh.all()
console.log(ldh);
console.log(zxy);
1:会生成一个空的对象;
2:里面的this指向会指向这个对象;
3:执行构造函数里面的代码,给这个新对象添加属性和方法
4:返回这个新对象
成员
构造函数中的属性和方法我们称为成员,成员可以添加
实列成员
实例成员:就是构造函数内部通过this添加的成员,uname,age,all就是实列成员
实列成员只能通过实列化的对象来访问
console.log(ldh.uname);
静态成员
通过构造函数来访问的添加,不能通过实列化对象来访问
Start.sex='男'
console.log(Start.sex);
构造函数的问题
构造函数方法很好用,但是存在浪费内存的问题
构造函数原型prototype
构造函数通过原型分配的是函数所有对象所共享的
javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象,注意这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所有
我们可以将不变的方法,直接定义到prototype对象上,这样所有的对象的实列就可以共享这些方法;
原型是什么?
一个对象,我们也可以称为Prototype为原型对象
原型的作用是什么?
共享方法
对象原型__proto__
对象都会有一个属性__proto__指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有一个__proto__原型的存在
console.log(ldh.__proto__==Start.prototype); //true
__proto__对象原型和原型对象prototype是等价
__proto__对象原型的意义就在于为对象的查找机制提供一个方向
constructor构造函数
对象原型(proto)和构造函数(prototype)原型对象里面都有一个属性constructor属性,constructor我们称为构造函数,因为他是指向构造函数本身。
constructor 主要用于记录该对象引用于那个构造函数,它可以让原型对象重新指向原来的构造函数