Flash Advent Calendar 16일차 - 손질 하위 대응 -

6296 단어 swf2jsJavaScript
Flash의 클래스는 일반적인 프로그래밍과 마찬가지로 수식자가 존재합니다.
수식부
접근 가능 범위
public
어디서나 액세스 가능
private
같은 클래스에서만 액세스 가능
protected
같은 클래스와 하위 클래스 (계승 클래스) 에서 접근할 수 있습니다
internal
동일한 매크로 패키지에서만 액세스 가능
그러나 JavaScript에는 public만 있습니다...
어떻게 컨트롤을 했냐면요.
swf2js의 클래스에는 Flash가 정의한 함수와 그것을 실현하기 위한 함수가 존재합니다.
패키지 등급의 변수와 함수를 추가하면 혼돈의 반이 되기 때문에 우선 다른 공간을 마련해야 한다.
ActionScript3.규격서
규격서를 보면 변수와 함수는trait에 저장됩니다.
다른 공간으로서, 나는trait를 저장 목표로 사용하고 싶다.
그리고 필요한 시간을 반의 다른 공간에 저장해 이용하면 가능하지 않을까 싶습니다.

다른 공간을 마련하다


각 레벨을 Object 레벨로 확장 가능
준비variables의 공간을 맵급 키-value로 관리합니다.
수식부
접근 가능 범위
public
본명을 사용하다
private
반에서 번호 매기기이름으로 관리
protected
클래스==JS의 클래스, 또는 클래스 instanceof JS의 클래스에서 판정하고 통과하면 직접 이름으로 관리합니다
internal
namespace가 존재하기 때문에 namespace이름으로 관리

public

// 取得
variables.get(name);

// 配置
variables.set(name, value);

private

// 取得
if (package.id === scope.packageId) {
    variables.get(package.id +"_"+ name);
} 

// 配置
if (package.id === scope.packageId) {
    variables.set(package.id +"_"+ name, value);
} 

protected

// 取得
const package = getPackage(namespace);
if (scope instanceof package) {
    variables.get(name);
} 

// 配置
if (scope instanceof package) {
    variables.set(name, value);
} 

internal

// 取得
if (scope.namespace === trait.namespace) {
    variables.get(trait.namespace +"_"+ name);
} 

// 配置
if (scope.namespace === trait.namespace) {
    variables.set(trait.namespace +"_"+ name, value);
} 
금방 썼지만 생각하기 전에 너무 힘들었어요.
생각나면 아주 간단한 구성이 된다.
그러나 퍼블릭 외에도 판정식이 있기 때문에 어쨌든 비용이 든다.
이것도 지금 머리를 안고 있는 포인트야...
좋은 방안이 있으면 꼭 댓글로 남겨주세요
내일은 기평@tkihira의'알려지지 않은 글로벌 Composite Operation 노하우'!!
너무 기대되니까 꼭 읽어주세요!!

좋은 웹페이지 즐겨찾기