在實際專案開發中,往往乙個頁面由多人共同開發,這個時候就存在乙個問題,一旦命名的變數相同,將會導致衝突,如下
// 張三定義的內容
var num=
123;
//李四定義的內容
var num=
"我是乙個字串"
這個張三在後面呼叫num時就會發生錯誤,為了避免該情況的產生,我們一般使用立即執行函式+閉包的功能進行開發,如下
// 張三定義的內容
var initzs =
(function()
return saynum;}(
))//李四定義的內容
var initls =
(function()
return saynum;}(
))initzs()
;//123
initls()
;//我是乙個字串
此時,雖然張三和李四定義的變數名稱一樣,但是互不影響,各自呼叫自己宣告的變數。
小技巧,先了解即可,為物件的每個方法return this,如下
var test =
, sayhome:
function()
} test.
sayname()
.sayhome()
//這個時候即可連續執行多個方法
在學習for in迴圈之前,先普及乙個小知識,當我們在呼叫物件的屬性的時候 ,js會將 obj.name 隱式的轉換為 obj[『name』]
var obj =
//該語句會將obj的每乙個屬性名賦值給a
for(
var a in obj)
通過上述**,理想的情況是會在控制台列印出obj的每乙個屬性的值,但是執行**確是三個undefined,這是怎麼回事呢?
之前我們說過,在呼叫物件屬性的時候,js會隱式的將obj.name轉換成obj[『name』],中括號裡面是字串,而此時上述for迴圈**等同於
for
(var a in obj)
此時系統將a當作了obj的屬性名,而在obj中我們沒有定義a,故返回undefined,為了讓系統將a識別為變數,我們只需要手動更改乙個obj[a]即可,如下
for
(var a in obj)
此時系統就能正確的列印出obj的所有屬性值了。
####hasownproperty()
hasownproperty()該方法會判斷引數是否是物件的屬性,並返回布林值,語法如下
var obj =
//括號中的引數必須為字串,否則會報錯
obj.
hasownproperty
("***"
)//true
obj.
hasownproperty
("abcc"
)//false
instanceof
instanceof用於判斷乙個a物件是否是通過b構造出來的,語法如下
var a =
newobject()
; a instanceof
object
//true
var b =
newarray()
; b instanceof
object
//true
通過上述**不難看出,通過object() new的物件可以看出返回值是true,但是為什麼 b instanceof object也返回true呢,這是因為instanceof的原理是在物件的原型上查詢是否由object,而array是object的子類,故返回true 列舉的命名空間
namespace system suit trumps suit.clubs string names system.enum.getnames trumps.gettype console.write names 0 clubs console.write trumps clubs consol...
day9 繼承模式 命名空間 物件列舉
傳統形式 原型鏈 過多的繼承了沒用的屬性 借用建構函式 不能繼承借用建構函式的原型 每次建構函式都要多走乙個函式 function person name,age,function student name,age,grade var student newstudent 共享原型 不能隨便改動自己...
繼承模式,物件空間,物件列舉
繼承的發展史 傳統形式 原型鏈 過多的繼承了沒用的屬性 借用建構函式 不能繼承借用建構函式的原型 每次建構函式都要多走一乙個函式 通過call來改變this的指向 function person age,name,function student age,name,grade var student...