JavaScript之函数调用与被调用的上下文对象this

不同的调用机制决定了函数上下文对象的不同:

  1.  作为普通函数进行调用时,其上下文是全局对象window;

  2.  作为(对象)方法进行调用时,其上下文对象时拥有该方法的对象;

  3.  作为构造器(通过 new xxx())进行调用时,其上下文是一个新分配的对象;

  4.  通过函数的apply()或者call()方法进行调用时,上下文可以设置成任意值;

 

判断一个函数是作为普通函数调用,还是即将被作为构造器函数(new一个新实例对象):

  1. 通过arguments.callee可以得到当前执行函数的引用

  2. “普通”函数的上下文是全局作用域

  3. 利用instanceof操作符作为测试已构建对象是否构建于指定的构造器

综合上述条件: this instanceof arguments.callee

  如果结果为false:作为普通函数执行;反之,被作为构造函数调用执行

//demo
//构造器调用函数:对象
function User(name){
	if(!(this instanceof arguments.callee)){//判断如果不是按照正确的方法进行调试的话,就修复此错误
		console.error("[User#constructor] Must be as a constructor to initial.");
		return new User(name);
	}
	this.name = name;
}

var name = "Johnny";

var user = User("Johnny");//错误方式调用构造器

assert(name == user.name,"user.name:" + user.name);

 

引用文献:

  《JavaScript忍者秘籍》

转载于:https://www.cnblogs.com/johnnyzen/p/7892656.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值