最近有了解下new的實現原理,發現乙個關於instanceof的問題。
function foo(name,age)
function
createclass
()let obj = createclass(foo,'zl')
console.log(obj instanceof foo) // false
複製**
我又去了解了下instanceof的實現,原始碼沒找到,只是在網上找到了原理
function instanceoftest(left, right)
}console.log(instanceoftest(obj, foo) // true
複製**
現在問題就出現了,肯定是new或者instanceof實現有問題,才導致這種情況,最後,我上stack overflow請求幫助,才明白問題出在__proto__上面。作為例項物件的乙個隱藏屬性,在不同瀏覽器上的表現形式不一樣,而且,通過__proto__並沒有真正修改了例項物件obj的原型鏈,只是修改了原型屬性。因此,通過es5提供的標準方法來獲取真正的原型鏈上的原型會發現
console.log(object.getprototypeof(obj)) //null
複製**
因此,對自定義的new和instaceof進行簡單的改造即可:
function
createclass
()function instanceoftest(left, right)
}console.log(obj instanceof foo) // true
複製**
null 與 {}
這乙個問題的產生不是__proto__相容問題,object.create(null)建立的物件,本身為原型鏈頂層,不再包含object原型鏈上的屬性以及下一層的原型鏈。那麼使用物件屬性__proto__僅僅為null物件的屬性賦值,並未建立原型鏈,intanceof遍歷原型鏈上找不到對應的原型。通過系統方法setprototypeof為null物件賦值原型屬性__proto__,同時將null物件的原型指向該原型鏈。因此,僅僅將object.create(null) 替換為{}同樣可以解決instanceof失敗問題
MSSQL因為資料型別而產生的效能問題。
還是最近出現的問題。有個表已經達到百萬級的數量了。最近不知道為什麼,不定時地發生造成整個資料庫很慢。這個表的改做索引的地方都做了。但是還是不定時地慢。經過分析。問題出現在。有個字段id,是int。但是如果使用的人輸入乙個超長的整數的時候,就會出現以上問題。如 select from table wh...
分布式鎖解決因為刪鎖而產生的兩種問題
設定鎖過期時間,訪問資料庫後刪除鎖。涉及的兩種問題都是毫秒級別的問題,為了減輕伺服器的壓力,一般在大廠裡要完善的 而小公司裡,則不需要這麼麻煩,不設計刪除鎖,直接等待過期時間過去自動刪除鎖。這樣就省去了因為刪除鎖產生的一系列問題。分布式鎖的兩種問題 第一種問題 鎖過期,刪除鎖,把別人的刪了 第1條執...
程式設計時,容易因為粗心而引發的錯誤
1 二維陣列初始化問題 int a 10 10 正確 a 10 10 錯誤,和初始化區別開,需要表示式對其賦值。2 陣列初始化時維數一定要是大於或者等於1的常量表示式 int a 錯誤 int b 10 int c b 錯誤,必須要是常量 const int sz get size int d ge...