1.原型添加方法(单个)
function Person () {
this.name = 'John';
}
// 直接在原型上面添加方法(单个添加)
Person.prototype.say = function() {
console.log('Hello,' + this.name);
};
var person = new Person();
person.say();//Hello,John
2.原型添加方法(对象的形式)
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
}
// 在原型上添加方法(以对象的形式,添加多个方法),
// 需要把放在构造函数前面
Person.prototype = {
sayName:function(){
alert(this.name);
}
}
//
var friend = new Person("Nicholas",29,"Software Engineer");
friend.sayName();
3.检测创建的原型
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName = function(){
alert(this.name);
}
}
var friend = new Person("Nicholas",29,"Software Engineer");
// undefined 证明了new出来的对象没有原型
alert(friend.prototype);
// Object 证明构造的Function的原型类型就是一个对象
alert(typeof Person.prototype);
// 任何对象都有原型
4.原型添加方法和属性与原来本身的冲突
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName = function(){
alert(this.name);
}
}
var friend = new Person("Nicholas",29,"Software Engineer");
// 通过原型增加的属性和方法
Person.prototype.name = 'meng1';
Person.prototype.sayName = function () {
alert('nihao');
}
alert(friend.name); // Nicholas
friend. sayName(); // Nicholas
// 删除函数本身的name属性,查找原型链上面的属性
delete friend.name;
alert(friend.name) // meng1
// 当函数对象本身的属性和方法与原型的属性和方法同名的时候;
// 默认调用的是函数对象本身的方法和属性
// 通过原型添加的属性和方法的确是存在的
// 函数对象本身的属性和方法优先级要高于原型的属性和方法