`
cxy020
  • 浏览: 61083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

js constructor属性(2)

 
阅读更多

constructor属性始终指向创建当前对象的构造函数.

 

如果对 constructor的指向不是很理解,请先看

http://cxy020.iteye.com/blog/1028100

//兼容ie浏览器测试
	var console = console || {};
	console.log = console.log || function(a){
		alert(a);
	}

	//类
	function Person(obj){
		obj = obj || {};
		this.sex = obj.sex || 0;
		this.age = obj.age || 0;
	}
	//原型函数
	Person.prototype.say = function(){
		console.log("我今年" + this.age);
	};

	//类
	function ZhangSan(){
		var like = "NV";

		//特权函数
		this.myLike = function(){
			console.log("性别" + this.sex + ",爱好" + like);
		}
	}

	//继承了Person
	ZhangSan.prototype = new Person({"sex":"男","age":18});
	ZhangSan.prototype.myLike = function(){
		//这里访问不到 私有变量 like
		console.log("性别" + this.sex + ",爱好没有");
	}
	//实例化
	var zs = new ZhangSan();

	//调用特权函数
	zs.myLike();
	//调用继承的原型函数
	zs.say();

	//如果要调用ZhangSan的myLike原型函数,则必须先删除特权函数.
	//因为js的查找链,先会搜索到特权函数.
	delete zs.myLike;
	//调用原型函数
	zs.myLike();

	//给父类添加原型函数
	Person.prototype.run = function(){
		console.log("跑的还挺快");
	}

	//在原型链直接添加,可以调用
	zs.run();

	//注意:这里将Person的整个原型链都修改了,
	//那么所有通过原型继承Person的对象都访问不到look
	Person.prototype = {
		//将默认指向object的constructor,指向到Person
		constructor:Person,
		look:function(){
			console.log("看看这个世界");
		}
	}

	//会报错
	//zs.look();

	//那么要如何才能访问到look呢
	//zs的constructor指向的Person
	console.log(zs.constructor == Person);
	//look在Person新的原型链上.那么通过Person的原型链就能访问到
	zs.constructor.prototype.look();

	//换一个思路,可以理解为可以通过constructor属性,继承到两个类.

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics