天天看點

JS new過程

JS中的函數很奇怪,既可以作為普通函數,也可以作為構造函數

通過構造函數寫類和普通函數執行
function Person(name){
    this.name=name
    this.test=function(){
        console.log("test");
    }
}
let p=new Person("zs")
Person("ls")

console.log(p);
console.log(window);
           
JS new過程

最明顯的差別是有沒有new和this指向

構造函數this指向建立的對象

普通函數this指向window

new的作用很明顯是建立一個對象,this指向這個對象和繼承方法屬性

既然new的是個對象,那麼一定是從原始對象開始建立

先建立一個Object p

又定義了一個Person類

Person的對象通過原型鍊繼承Person類的屬性和方法

通過call把this指向p

let p =new Object();
let name="zs"
function Person(){
    this.name
    this.test=function(){
        console.log("test");
    }
}
p.__proto__=Person.prototype
p.name=name
Person.call(p)
Person.prototype.age=18
console.log(p);
           
JS new過程

繼續閱讀