js系列二十:高阶函数

本文探讨JavaScript中构造函数与原型方法中的this指向问题,揭示new关键字如何使构造函数变得特殊。通过模拟new操作,解释了new如何创建中间对象并设置原型链,同时阐述了高阶函数的概念,强调理解其背后的封装思想对于写出更优雅的代码至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家对于javascript面向对象相关的知识可能都有所涉略,有一个问题可能困扰大家很久了,那就是在构造函数中,如果使用了 this ,那么这个 this 指向谁呢?如果在定义的原型方法中使用了 this ,那么这个 this 又指向谁?是构造函数,原型,还是实例?

function Person(name, age){
	this.name = name;
	this.age = age;
}
Person.prototype.getName = function() {
	return this.name;
}

var p1 = new Person("Jake",18);
p1.getName();

构造函数其实就是普通函数,而 this 是在函数允许难过时确认的。那么是什么导致了构造函数变得很特别?

答案与 new 关键字有关系
如果我们自定义一个 new 方法, 来模拟关键字 new 的能力,那么会有如下实现。

// 将构造函数一参数形式传入
function New(func){
	// 声明一个中间对象,该对象为最终返回的实例
	var res = {};
	if(func.prototype != null){
		// 将实例的原型指向构造函数的原型
		res.__proto__ = func.prototype;
	}
	// ret 为构造函数执行的结果,这里通过 apply
	// 将构造函数内部的 this 指向修改为指向 res 即实例对象
	var ret = func.apply(res,Array.prototype.slice.call(arguments,1));

	/
博客
v8worker
05-08 2958
05-06 2941
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值