new的原理及实现


 1 <script>
 2         function Person(name, age) {
 3             this.name = name
 4             this.age = age
 5             console.log(this)
 6         }
 7         Person.prototype.have = 'cat'
 8         const person = new Person('zhangsan', '20')
 9         console.log(person.name)
10         console.log(person.age)
11         console.log(person.have)
12     </script>

从这个例子中,可以看到new具有以下能力:

1.new创建出来的实例可以访问构造函数Person的属性

2.new创建出来的实例可以访问构造函数原型上的属性

3.new可以将构造函数中的this绑定到新创建出来的对象person上

无返回值的new实现:

 1 <script>
 2         function Person(name, age) {
 3             this.name = name
 4             this.age = age
 5             console.log(this)
 6         }
 7         Person.prototype.have = 'cat'
 8         function fakenews(Fn) {
 9             // 创建一个空对象
10             let obj = new Object()
11             // 将新对象的原型指针指向构造函数的原型
12             obj.__proto__ = Fn.prototype
13             // 处理除了Fn以外的参数
14             // [].slice:返回数组中的一段,在这里是返回arguments数组第一个数以后的所有数
15             // 将[].slice看作Fn,这里其实就是将[].slice的指向改为arguments
16             Fn.apply(obj, [].slice.call(arguments, 1))
17             return obj
18         }
19         const person = fakenews(Person, "张三", "20")
20         console.log(person.name)
21         console.log(person.age)
22         console.log(person.have)
23     </script>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM