构造函数中的属性和方法称为成员,成员可以添加
1、实例成员:
①是构造函数内部通过this添加 的成员
②实例成员只能通过实例化的对象来访问
2、静态成员
①在构造函数本身上添加的对象
②静态成员只能通过构造函数来访问
![](https://img.haomeiwen.com/i10981646/ae5243a6c16d6515.png)
构造函数
<script >
function Star(uname,age){
this.uname=uname;
this.age=age;
}
Star.prototype.sing=function(){
console.log('我会唱歌');
}
var ldh=new Star('刘德华',18);
var zxy=new Star('张学友',19);
ldh.sing();
zxy.sing();
//一般情况下,我们的公共属性定义到构造函数里面,公共的方法我们放到原型对象身上
</script>
对象原型proto
![](https://img.haomeiwen.com/i10981646/a2d247788b907dec.png)
![](https://img.haomeiwen.com/i10981646/4f21cc5aced66e20.png)
<script >
function Star(uname,age){
this.uname=uname;
this.age=age;
}
Star.prototype.sing=function(){
console.log('我会唱歌');
}
var ldh=new Star('刘德华',18);
var zxy=new Star('张学友',19);
ldh.sing();
zxy.sing();
//一般情况下,我们的公共属性定义到构造函数里面,公共的方法我们放到原型对象身上
console.log(ldh);//对象身上系统自己添加一个__proto__指向我们构造函数的 原型对象
//console.log(ldh.__proto__===Star.prototype)
</script>
constructor构造函数(指回构造函数本身)
<script >
function Star(uname,age){
this.uname=uname;
this.age=age;
}
//h很多情况下,我们需要手动的利用constructor这个属性指回原来的构造函数
// Star.prototype.sing=function(){
// console.log('我会唱歌');
// }
Star.prototype={
//如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动的利用constructor指回原来的构造函数
constructor:Star,
sing:function(){
console.log('我会唱歌');
},
movie:function(){
console.log('我会表演');
}
}
var ldh=new Star('刘德华',18);
var zxy=new Star('张学友',19);
console.log(Star.prototype);
console.log(ldh.__proto__);
console.log(Star.prototype.constructor);
console.log(ldh.__proto__.constructor);
</script>
构造函数、实例、原型对象三者之间的关系
![](https://img.haomeiwen.com/i10981646/9ef2c8844cadf4a9.png)
原型链:
(1)Star原型对象里面的proto原型指向的是Object.prototype
(2)Object.prototype原型对象里面的 proto原型指向null
![](https://img.haomeiwen.com/i10981646/7513b0e9c3f09d6a.png)
网友评论