1.prototype(原型对象)
每个函数都有一个prototype属性,它是一个指向原型对象的指针,原型对象在定义
函数时同时被创建,原型对象的用途是包含所有实例共享的属性和方法
function Person(){
}
//自定义原型对象的属性和方法
Person.prototype.name="Tom";
Person.prototype.age=25;
Person.prototype.sayName=function(){
alert(this.name);
};
//原型对象中的所有属性和方法 都会自动被所有实例所共享
var person1=new Person();
var person2=new Person();
person1.sayName();//Tom
person2.sayName();//Tom
只要创建了一个新函数,每个函数在创建之后都会获得一个prototype的属性,这个
属性指向函数的原型对象(原型对象在定义函数时同时被创建),此原型对象又有一
个名为“constructor”的属性,反过来指向函数本身,达到一种循环指向
2._ proto _
当调用构造函数创建一个新实例后,该实例的内部将包含一个指针[[Prototype]],
该指针指向创建它的构造函数的原型,在脚本上没有标准的方法来访问
[[Prototype]],但大多数浏览器都支持通过__proto__来访问。
function Person(){
}
//自定义原型对象的属性和方法
Person.prototype.name="Tom";
Person.prototype.age=25;
Person.prototype.sayName=function(){
alert(this.name);
};
//原型对象中的所有属性和方法 都会自动被所有实例所共享
var person1=new Person();
var person2=new Person();
person1.sayName();//Tom
person2.sayName();//Tom
alert(person1.__proto__===Person.prototype);//true
3.总结
1.只要创建了一个函数,该函数的原型对象也随之同时被创建出来,原型对象中的属性
和方法被经由其相对应的构造函数所创建的实例所共享
2.每个函数在创建之后都会获得一个prototype的属性,这个属性指向该函数的原型对象
3.每个实例对象的__proto__属性都指向其构造函数的原型
4.区别
1.prototype 指向一块内存,这个内存里面有共用属性,而 __ proto __ 指向同一块内存。
2.prototype 和__ proto __ 的不同点在于:prototype 是构造函数的属性,而 __ proto __ 是对象的属性
3.如果没有 prototype,那么共用属性就没有立足之地如果没有 __ proto __,那么一个对象就不知道自己的共用属性有哪些。