关于js的构造函数和原型对象

来源:互联网 发布:电信是什么网络制式 编辑:程序博客网 时间:2024/05/21 06:55
构造函数的特点
1、构造函数的首字母必须大写,用来区分于普通函数
2、内部使用的this对象,来指向即将要生成的实例对象
3、使用New来生成实例对象
eg:
function Person(name,age){
this.name=name;
this.age=age;
this.sayHello=function(){
console.log(this.name+"say hello");
}
}
var boy=new Person("bella",23);
boy.sayHello();//bella say hello

构造函数的缺点:所有的实例对象都可以继承构造器函数中的属性和方法。但是,同一个构造函数的对象实例之间,无法共享属性和方法。
解决思路
1、所有实例都会通过原型链引用到prototype
2、prototype相当于特定类型所有实例都可以访问到的一个公共容器
3、那么我们就将重复的东西到公共容器就好了

js中每个数据类型都是对象,除了null和undefine,而每个对象都是继承自一个原型对象

什么是原型?
原型是一个对象,其他对象可以通过它实现属性继承

prototype是构造函数的属性
constructor是构造函数的prototpe属性所指向的那个对象
也就是说constructor是原型对象的属性

function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype.sayHello=function(){
console.log(this.name+"hello")//lalahello
}
var girl=new Person("lala",23);
girl.sayHello();
console.log(girl.prototype)//undefined new出来的普通对象是没有原型的
console.log(girl.constructor)
/*ƒ Person(name,age){
this.name=name;
this.age=age;
}*/
console.log(Person.prototype.constructor)
/*ƒ Person(name,age){
this.name=name;
this.age=age;
}*/

Person.prototype包含了3个属性,一个是constructor,一个是__proto__,一个是刚才我们添加的sayHello
这个constructor就是我们的构造函数Person

那么__proto__是?
原型链:
每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是这样一直找下去


阅读全文
0 0
原创粉丝点击