对象的创建

创建对象

工厂方式

  • 来个栗子:
	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==//
	

属性在原型中完全成立的条件:来个栗子

  • hasPrototypeProperty()
	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)}
	}
posted @ 2017-05-02 16:04  老年游侠  阅读(178)  评论(0编辑  收藏  举报