原形函数之prototype
当函数以构造函数形式调用时,他创建的对象都会有个隐藏属性我们称为原形函数,我们可以用__proto__访问该构造的原形对象
function ff (){
}
var c = new ff()
//prototype是函数的属性值,而__proto__是对象的属性值
console.log(ff.prototype== c.__proto__) //True
原形对象相当于一个公共区域,所有同一个类的实例都可以访问该原形对象,所以可以将对象中共有的内容存放到原形对象中去,当我们访问一个对象的属性或方法时候,会优先在自身找,如果没找到则去原形对象中寻找,找到则调用,创建构造函数时,将共有的属性或者方法统一添加到构造函数中的原形对象里去,不会影响全局作用域,如果自身方法或者属性需要覆盖,可以在对象中添加相同的方法和属性利用优先调用自身方法和属性的原理进行覆盖
function fun(name){
// this.name = "alex"//原先构造函数写法
// this.age = 18
// sayname = function()
fun.prototype.name = name
fun.prototype.nature = function(){
alert(name + 111111)
}
}
var a = new fun("嘻嘻嘻")
console.log(a.name)
a.nature()
in检查对象中是否含有某个属性时,如果对象中没有但是原形中有也会返回true,如果要检查方法中对象中本身是否含有该属性则用hasOwnproperty()这个方法
function fun(){
// this.name = "alex"
// this.age = 18
// sayname = function()
}
fun.prototype.name = "原形名字"
fun.prototype.nature = function(){
alert(111111)
}
var a = new fun()
// console.log(a.name)
a.nature()
console.log("name" in a) //true
console.log(a.hasOwnProperty("name")) //false