前提知识
首先要弄清楚,什么是实例属性,什么是静态属性,什么是原型
- 类在new之后会产生一个实例,就像工厂做了一个机器人一样,而原型是这个工厂做机器人的模板。
- 这个工厂可以制作一类机器人,简称为类
- 原型是机器人的模板,是工厂制作的重要参照,但不是唯一参照(工厂可以对在模板之上进行二次加工)
- 这个机器人是工厂参照模板并加以其他加工操作实际做出来的例子,所以叫实例。
接下来将以工厂和机器人为大家讲述(关于更多类似的例子请看我的其他文章)。
function RobotFactory(name,age){
//实例属性
this.name = name
this.age = age
this.a=function(){}
}
//原型
RobotFactory.prototype.sayHello=function(){
console.log('Hello')
}
//静态属性
RobotFactory.area = '100平方米'
实例属性
实例属性是各个实例所独有的。
比如这里的名字,年龄是制造出来的机器人的,而不是这个工厂的名字,年龄。
var robot1=new RobotFactory('机器人1号',18)
console.log(robot1.name+'的年龄是'+robot1.age)
执行结果:
静态属性
静态的是指向类自身,而不是指向实例对象。
换句话说,这个占地面积的属性是工厂的属性,而不是机器人的属性。
console.log(RobotFactory.area)
console.log(robot1.area)
执行结果:
原型属性
原型属性又称公共属性,它不属于某个实例,而是所有实例的公共属性
var robot1=new RobotFactory('机器人1号',18)
var robot2=new RobotFactory('机器人2号',19)
if(robot1.sayHello===robot2.sayHello){
console.log('他们公用一个方法')
}
执行结果:
'==='代表他们方法的地址也是一样的,即公用一块内存空间。实例属性无法达成这样的条件。
var robot1=new RobotFactory('机器人1号',18)
var robot2=new RobotFactory('机器人2号',19)
if(robot1.a===robot2.a){
console.log('他们公用一个方法')
}else{
console.log('他们不公用一个方法')
}
执行结果:
区别
- 实例属性属于具体的某个实例对象
- 静态属性属于类
- 原型属性是所有实例对象的公共属性,存放在一块内存中。
关于原型的更多知识请移步一个例子讲清楚原型对象