2013-10-18 76 views
7

在Dart文檔中的任何地方,建議使用js包進行javascript互操作。dart:js和js包的區別是什麼?

但是,我最近發現在SDK中存在dart:js包似乎有類似(但不相同)的接口。

這些軟件包有什麼不同嗎?它們的功能是否相同?哪一個被推薦?

回答

8

Js interop以package:js開頭。它與window.postMessage一起建造。

後來增加了dart:js以提供更好的性能並減小了編譯後的js文件的大小。基本目標是:

  • 去除範圍和生命週期手工處理
  • 避免noSuchMethod保持編輯大小盡可能低
  • 重命名對象,使API更容易理解

一旦鏢:js已經準備好,包:js已被改寫爲使用dart:js下封面。

包:JS提供正值增加了JS大小的成本的簡單的API(因爲包:JS使用鏢:鏡noSuchMethod)。

這裏是包做同樣的事情:JS鏢:JS

import 'package:js/js.dart' as js; 

main() { 
    var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff); 
    var renderer = js.context.PIXI.autoDetectRenderer(400, 400); 
    document.body.append(renderer.view); 
} 

import 'dart:js' as js; 

main() { 
    var pixi = new js.JsObject(js.context['PIXI']['Stage'], [0xffffff]); 
    var renderer = js.context['PIXI'].callMethod('autoDetectRenderer', [400, 400]); 
    document.body.append(renderer['view']); 
} 
相關問題