感謝 babel,我們可以在專案中使用 es6 語法開發專案,大大提公升開發效率。
但是,在 ie<=10 中,我們需要留意乙個 babel 翻譯的處理,那就是 es6 類繼承語法。
class root
class model extends root {}
model.displayname // 'root'
如上**中,model.displayname
應該為'root'
,但是在 ie<=10 中 displayname 不會被繼承。
因為,上述 es6 繼承 babel 會轉換成_inherts
繼承。
function _inherits(subclass, superclass)
subclass.prototype = object.create(superclass && superclass.prototype,
})if (superclass)
object.setprototypeof
? object.setprototypeof(subclass, superclass)
: (subclass.__proto__ = superclass)
}
static
變數值繼承主要依賴下面這一段**
object.setprototypeof
? object.setprototypeof(subclass, superclass)
: (subclass.__proto__ = superclass)
但是在 ie<=10 中,object.setprototypeof
方法未被定義!同時 ie<=10 中不存在__proto__
原型。
所以,如果需要繼承類的靜態變數,需要使用babel-plugin-transform-proto-to-assign
將bar.__proto__ = foo
賦值,轉換為
var _defaults = function(obj, defaults)
} return obj
}_defaults(bar, foo)
注意如果使用了 babel-plugin-transform-runtime 外掛程式,將一些通用的方法轉換成require('babel-runtime/...')
則需要在 webpack js loader 中 include 字段加入如下片段:
include: [
// 包括 babel inherts 處理,相容 ie10
// babel-plugin-transform-proto-to-assign
// 將 inherits.js 中的 subclass.__proto__ = superclass 進行轉換
/\/node_modules\/babel-runtime\/helpers\/inherits/
]
雖然用上訴方式可以解決普通靜態變數的繼承問題,但是對於symbol
型別的 static 變數,上訴方法還是不能生效!
考慮將_defaults
方法,使用object.getownpropertysymbols
方法進行symbol
型別的處理?
解決 ajax 在IE10以下失效的問題
一 問題重現 本地的指令碼請求測試環境的介面 1 2 3 4 5 6 ajax 在chrome firefox和ie9以上的都正常傳送請求,ie10以下沒有傳送請求。二 解決思路 ajax 中把錯誤資訊顯示出來 1 2 3 4 5 6 7 ajax error function a,b,c 三 原來...
關於靜態變數的繼承
父類 package test public class father 子類1 package test public class son1 extends father 子類2 package test public class son2 extends father 測試 package tes...
python類靜態變數
python的類靜態變數直接定義在類中即可,不需要修飾符,如 class test stc attr 1def init self,attr1,attr2 self.attr1 attr1 self.attr2 attr2 在類test中,stc attr是屬於類test的靜態變數,attr1和at...