JS中在new的时候发生了什么
- 创建了一个新的对象;
- 链接到构造函数的原型上;
- 绑定this指向;
- 返回这个对象。
function _new() {
let obj = {};
let Con = [].shift.call(arguments);
obj.__proto__ = Con.prototype;
let result = Con.apply(obj, arguments);
return typeof obj === "object" ? obj : {};
}
1
2
3
4
5
6
7
2
3
4
5
6
7
function Person(name,age) {
this.name = name;
this.age = age;
}
function _new() {
var args = [].slice.call(arguments);
var constructor = args.shift();
var context = Object.create(constructor.prototype);
var result = constructor.apply(context, args);
return (typeof result === 'object' && result != null) ? result : context;
}
var actor = _new(Person,'张三',28);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
提示
arguments是类数组对象,它是用来存储实参的,而且有存储顺序,也具备和数组相同的访问性质和方式,拥有数组的长度属性length。用来存储实际传递给函数的参数。
具有callee属性,返回正被执行的Function对象;
可以通过slice来讲arguments转换为真实的数组:
Array.prototype.slice.call(arguments)
;[].slice.call(arguments)
Array.from(arguments)
[...arguments]
arguments和函数相关联,其只有在函数执行时可用,不能显示创建。
Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。
参考链接:
编辑 (opens new window)
上次更新: 2022/05/17, 21:50:47