在js中我们常常使用构造函数
今天我们来讲一下构造函数的prototype属性
function Person(){
}
var a=new Person();
console.log(a)
在检查下发现Person类中有个prototype属性,这就是我们今天要说的原型对象
当我们在全局作用域中创建一个个构造函数时,就会对全局作用域造成污染,如上代码,当我们再次创造一个Person构造函数时,第一Person构造函数就会被覆盖。如需解决这个问题,我们就需要用到构造函数的prototype属性。
我们先来了解一下他的基本性质
- 每个构造函数都有prototype属性
- 子元素可以使用__proto__(两个下划线)去访问构造函数的protype属性
function Person(){ } var a=new Person(); console.log(a.__proto__)
- 每个构造函数的protype不相等
了解他的基本性质之后,我们就可以开始用了
function Person(){
Person.prototype.b=123;
}
var a=new Person();
console.log(a.b)
若我们不想用初始值,可以用子元素重新定义
function Person(){
Person.prototype.b=123;
}
var a=new Person();
a.b="zhangsan";
console.log(a.b)
ps:当子元素重新定义后Person.prototype.b还是等于123,
然后我们可以这样用
function Person(){
Person.prototype.b=function(){
console.log("zzg")
};
}
var a=new Person();
a.b();
这样我们创建的b方法就不会污染全局作用域,不容易被下面的代码覆盖。