IE10以下類靜態變數繼承

2021-08-21 12:37:14 字數 1806 閱讀 3169

感謝 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-assignbar.__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...