JavaScript-new操作符具体做了什么?
# new操作符具体做了什么?
- 创建了一个空的对象
function Foo(){
}
console.log( new Foo())//Foo {}
1
2
3
4
2
3
4
- 将空对象的原型,指向于构造函数的原型
function Foo(){
}
console.log(Foo.prototype == new Foo().__proto__)//true
1
2
3
4
2
3
4
- 将空对象作为构造函数的上下文(改变this指向)
function Foo(){
console.log(this)//Foo {}
this.name = '张三'
}
console.log( new Foo())//Foo { name: '张三' }
1
2
3
4
5
2
3
4
5
function Foo(){
console.log(this) //window
this.name = '张三'
}
console.log( Foo())//undefined
1
2
3
4
5
2
3
4
5
对构造函数有返回值的处理判断
返回的是基本类型 --> 忽略返回值
function Foo(){ this.name = '张三' return 1111 } console.log( new Foo())//Foo { name: '张三' }
1
2
3
4
5返回的是引用类型 --> 则使用return返回的
function Foo(){ this.name = '张三' return {} } console.log( new Foo())//{}
1
2
3
4
5function Foo(){ this.name = '张三' return [1,2,3] } console.log( new Foo())//[1,2,3]
1
2
3
4
5
# 实例
function Fun(age,name){
this.age = age
this.name = name
return 111
}
function create(fn,...args){
//1.创建了一个空的对象
var obj = {}
//2.将空对象的原型,指向于构造函数的原型
Object.setPrototypeOf(obj,fn.prototype)
//3.将空对象作为构造函数的上下文(改变this指向)
var result = fn.apply(obj,args)
//4.对构造函数有返回值的处理判断
return result instanceof Object ? result : obj
}
console.log(create(Fun,18,'张三'))//Fun { age: 18, name: '张三' }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
上次更新: 2024/08/14, 04:14:33