作用域安全的建構函式

2022-02-22 14:02:51 字數 799 閱讀 3163

一般建構函式定義和呼叫如下:

function person(name,age,job)

var person=new person('thinksley',24,'web developer');

console.log(person.name); //thinksley

而如果例項化物件的時候不用new的話,this會對映到全域性的window物件上,這時候person.name就會變成undefined了,要把物件改成window:

function person(name,age,job)

var person=person('thinksley',24,'web developer');

console.log(window.name);//thinksley

console.log(person.name);//undefined

那麼完整的建構函式可以用if判斷來做了,如下

function person(name,age,job)

else

}var person=person('thinksley',24,'web developer');

console.log(person.name);//thinksley

var person=new person('thinksley',24,'web developer');

console.log(person.name); //thinskley

這樣建構函式就確保了this是否是person物件的例項,要麼使用new操作符,要麼在現有的person例項環境中呼叫建構函式。

作用域安全的建構函式

眾所周知,建構函式一般用new去呼叫,比如 function person name,age var xiaoming new person xiaoming 21 因為使用new 呼叫建構函式,所有建構函式內部使用的this會指向新建立的物件的例項,但是,如果沒有用new去呼叫建構函式,情況會怎麼...

Javascript作用域問題的建構函式的變數

建構函式new對於使用。代表建立物件。此外,它可以被用作普通的函式呼叫,因為它也是乙個功能。function person name person 12 alert window.name 12 能夠看到當建構函式被當成普通函式呼叫的時候。this代表的是全域性的window物件。非常顯然把建構函式...

如何寫乙個作用域安全的建構函式

建構函式本質上就是乙個使用new操作符呼叫的函式,使用new呼叫時,建構函式內用到的this物件會指向新建立的物件例項 function girlfriend name,age,height 使用new操作符來分配這些屬性 var girlfriend new girlfriend ying 23,...