创建对象
工厂方式
function createPerson(name,sex){
//原料
var obj = new Object();
//加工
obj.name = name;
obj.sex = sex;
obj.show = function (){
alert(this.name)
}
//出厂
return obj;
}
var p1 = createPerson('hezhi','男');
var p2= createPerson('hezhi','男');
p1.show(); //hezhi
p2.show(); //hezhi
alert(p2.show==p1.show) //false
- 所谓的构造函数模式,原型模式,都是在工厂方式上进一步改造而成的
判断一个属性倒底是在原型中,还是在实例中 hasOwnProperty()
function Person(){
};
Person.prototype.name = "hezhi";
Person.prototype.age = 24;
var p1 = new Person()
alert(p1.name) //hezhi
alert(p1.hasOwnProperty("name")) //false
p1.name = 'zhaoqiao'
alert(p1.name); //zhaoqiao
alert(p1.hasOwnProperty("name")) //true
//==华丽的分割线: 只有到name这个属性在对象的实例中的时候才会返回true;当存在原型中的时候只会返回false==//
属性在原型中完全成立的条件:来个栗子
function Person(){
};
Person.prototype.name = "hezhi";
Person.prototype.age = 24;
var p1 = new Person()
alert(p1.name) //hezhi
alert("name" in p1) //true
p1.name ="zhangqiao";
alert(p1.name) //zhangqiao
alert("name" in p1) //true
in 操作符表示,只要实例对象p1能够访问到的属性 //返回值都是 true
function hasPrototypeProperty(obj,name){
return !obj.hasOwnProperty("name") && ("name" in obj)
}
对象字面量的方法来重写原型对象
function (){
}
Person.prototype = {
name : 'hezhi',
age : 29,
show : function(){alert(this.name)}
}