javascript 高级——基于原型链和伪装的继承

首先理解call,call是javascript中一个很重要的部分,是对象继承的一个重要部分

javascript对象的分类

/*
   			 * 由于在js中首先建立的是函数,因此可以在一个函数中
   			 * 调用其他函数的构造函数,完成赋值
   			 */
   			function setName(name){
				this.name = name;
				this.say = function(){
					alert("I'm" + this.name);
				}
			}
			function parent(name){
				this.method = setName;
				this.method(name);
				delete this.method;
			}
			
			new parent("张三").say();
在这个例子中间,看到实际上是在parent中定义一个属性,然后将setName这个函数的地址拷贝给它

然后就将setName变成了一个本地的函数,使用this.调用,确保name的上下文是属于parent的




/*
   			 * 由于在js中首先建立的是函数,因此可以在一个函数中
   			 * 调用其他函数的构造函数,完成赋值
   			 */
   			function setName(name){
				this.name = name;
				this.say = function(){
					alert("I'm" + this.name);
				}
			}
			function parent(name){
				this.method = setName(name);
				//this.method(name);
				delete this.method;
			}
			
			new parent("张三").say();
使用这样的方法发现say是未定义的,因为在调用setName的时候,上下文是window没有被指定为parent


call和以前的继承非常类似

		function Parent(name){
			this.name = name;
			//alert(this.prototype);
			//注意这里不能使用this.prototype因为Parent一但被实例化
			//以后没有Prototype属性,只有不能被主动访问的_prop_属性
			//if(!Parent.prototype.say){  //也不能使用原型来进行内部的方法定义   
				this.say = function(){    //因为call是改变关键字this,但是在这里
					alert(this.name);     //直接使用parent,所以就不行了
				}
			//}
		}
		
		function Children(name){
			Parent.call(this,name);
		}		
		var c = new Children("lisi");
		alert(c.prototype);




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值