一般建構函式定義和呼叫如下:
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,...