在js中每个函数都有一个prototype属性,是一个指向某个对象的指针。这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。感觉有点像java语言中的静态变量(注:不过prototype属性是不能改变值的,静态变量是可以改变值)。
prototype属性定义的方式:
function Person(){}
Person.prototype.name = "zhangsan";
Person.prototype.age =23;
Person.prototype.sayHello = function(){
return "hello,I'm zhangsan";
};
1.construtor:所有原型对象都有一个construtor属性,他是指向prototype 属性所在的函数的一个指针,可以用下面语句检测:
alert( Person.prototype.constructor == Person);//true
2.如果对象定义的属性的属性名跟原型的属性名相同,该对象定义的属性将会覆盖原型中的同名属性。
例如: function Person(){}
Person.prototype.name = "zhangsan";
line1:var person1=new Person();
line2:person1.name="wangwu";
alert(person1.name) //wangwu
它先会在person对象中搜索name属性,如果没有name属性就在搜索原型的属性中是否有name属性
注,若没有 line2这一行,那么alert(person1.name)将会输出zhangsan
我们也可以通过delete person1.name 删除person1的name属性,从而保证person1.prototype.name不被覆盖