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