javascript 面向对像(二)

<pre name="code" class="javascript"><pre name="code" class="javascript"><span style="white-space:pre">			</span>/*面向对像中的属性和方法*/
 
<span style="white-space:pre">			</span>function createPerson(name) {
			 	this.name=name;
			};
			createPerson.prototype.name="小明";
			var obj=new createPerson('小强');
			console.log(obj.name);							//小强


			function createPerson2() {
			 //	this.name=name;
			};
			createPerson2.prototype.name="小明";
			var obj2=new createPerson2();
			console.log(obj2.name);							//小明


 
/** 

* 根据以上两个例子可以看出,实例上有name属性就会打印出实例上的属性,
* 如果实例上没有属性,则打印出原型上的属性,方法也是一样。
* 由此得出,js的原型链,首先在自身的构造函数上找属性和方法,如果构造函数没有就到原
* 型上找,和函数作用域有点接近,就近原则。原型链的最顶层就是Object.prototype了。

*/

	<span style="white-space:pre">		</span>function createPerson(name) {
			 	this.name=name;
			 	this.showName = function(){
			 		console.log(this.name);
			 	}
			};
			var obj=new createPerson('小强');
			console.log(obj.hasOwnProperty('showName'));	<span style="white-space:pre">	</span>//true
			console.log(obj.hasOwnProperty('name'));		//true;

			function createPerson2() {
			};
			createPerson2.prototype.name="小明";
			createPerson2.prototype.showName=function(){
				console.log(this.name);
			};
			var obj2=new createPerson2();
			console.log(obj2.hasOwnProperty('showName'));	<span style="white-space:pre">	</span>//false
			console.log(obj2.hasOwnProperty('name'));		//false;
/**
* hasOwnProperty,
* 用来判断对像是否具有该属性,但只限于构造函数内的,原型上的是查不到的。
* 返回的是一个Boolean值  false 或 true
*/

<span style="white-space:pre">			</span>function createPerson() {}; 

			createPerson.prototype.name = "小明";	
			createPerson.prototype.age = 20;

			var obj=new createPerson();
			console.log(obj.constructor);			//createPerson

			createPerson.prototype={
				name:"小明",
				age:20
			};
			var obj=new createPerson();
			console.log(obj.constructor);	//Object

/**
* 第一种赋值的方式是在原型上添加属性,第二种是把原型等于一个对像。而这个对像的构造
* 函数是Object。
* 查看对像的构造函数
* constructor 每个函数自身都带有该属性,是程序自动生成的属性。
* 程序自动生成的这句话,createPerson.prototype.constructor=createPerson
* 该属性并不是原型上。
* 基于以上两个赋值的方式,应该手动改变一个constructor的指向:
*/

 <span style="white-space:pre">			</span>createPerson.prototype={
			 	constructor:createPerson,
				name:"小明",
				age:20
			};
			//或者
			createPerson.prototype.constructor=createPerson;
			var obj = new createPerson();
			console.log(obj.constructor)



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值