JavaScript:原型prototype:我们在创建每个函数都有一个prototype属性 这个属性是一个指针,指向一个对象,这个对象就是我们所谓的原型对象
1.如果函数作为普通函数调用prototype没有任何作用, 当函数以构造函数形式调用时,他所创建的对象中都会有一个隐含的属性,指向该构造函数的原型对象,我们可以用__proto__来访问该属性
//(prototype创建属性, __proto__访问)
function MyClass() {
}
//向MyClass函数的原型中添加属性a
MyClass.prototype.a = "周杰伦"
// 向MyClass函数的原型中添加一个方法
MyClass.prototype.fun = function() {
alert("邓紫棋")
}
//当以构造函数调用时,对象中都会有一个隐含的属性
//,指向原型对象 我们可以用__proto__来访问该属性
var b = new MyClass();
//所以 prototype和__proto__都指向原型
console.log(MyClass.prototype == b.__proto__) //ture
//因为MyClass.prototype和b.__proto__都指向同一个原型对象
//,所以 MyClass.prototype添加的属性A和fun方法,b.__proto__都能访问到
console.log(b.__proto__.a) //周杰伦
console.log(b.__proto__.fun) //= function() {
// alert("邓紫棋")
// }
2.原型对象就相当于一个公共的区域,所有同一个类的实例,都可以访问到这个原型对象,我们可以将对象中共有的内容,存放到到原型对象中
function MyClass() {
}
//向MyClass函数的原型中添加属性a
MyClass.prototype.a = "周杰伦"
//实例对象b
var b = new MyClass();
//所以 prototype和__proto__都指向原型
console.log(MyClass.prototype == b.__proto__) //ture
console.log(b.__proto__.a) //周杰伦
//实例对象c
var c = new MyClass();
console.log(MyClass.prototype == c.__proto__) //ture
console.log(c.__proto__.a) //周杰伦
总结. 以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这些不用分别为每个对象添加,也不会影响到全局作用域,就可以是每个对象都具有这些属性和方法了