2009-10-13 5 views
0

제발 필요한 자바 스크립트를 확인하십시오.몇 가지 메서드가 포함 된 JavaScript에서 일부 속성을 만들 수 있습니까?

var someVariable = new SomeDataType(); 

// I can directly access value of its property. 
someVariable.someProperty = "test"; 
alert(someVariable.someProperty); // <- this command must should "test" 

// However, I have some methods in above property 

// I want to validate all rule in this property. 
someVariable.someProperty.isValid(); // <- this method will return true/false 

현재 JavaScript 버전에서 가능합니까?

UPDATE

내 대답은 제발 봐!

답변

2

자바 스크립트에서 이와 같은 객체를 처리 할 수는 없으며 그렇게해서는 안됩니다. 다른 사람이 언급했듯이 toString() 메서드를 재정 의하여 기능의 절반 (읽기 ​​부분)을 얻을 수 있지만 객체를 덮어 쓰지 않고 이와 같은 객체에 대입 연산자를 사용할 수는 없습니다.

중첩 된 개체를 사용하는 것과 같은 다른 방법을 선택해야합니다 (CMS 권장).

+0

나는이 의견에 동의한다. –

+1

그 다음 답 답장으로 표시합니다.) –

+0

Ramesh Vel와 같은 두 가지 접근 방식이 있으며 게시했습니다. 감사. –

0
someVariable.someProperty = [ test, anotherFunc, yetAnotherFunc]; 
someVariable.somePropertyAllValid= function() { 
    for(var prop in someVariable.someProperty) { 
     if(!prop()) return false; 
    } 
    return true; 
}; 

someVariable.somePropertyAllValid(); 
+0

. defaultValue, ruleCollection과 같은 것입니다. –

+0

@Soul_Master u가 u를 추가 할 수 없다는 의미 일 경우, 배열을 추가하면 u가 될 때 함수를 추가 할 수 있습니다. 다른 한편으로는 u가 그 args 또는 그런 것들이 있다는 것을 의미한다면, 줄을 정의하거나 지역 변수에 할당 할 수 있습니다 ... pls는 "나는 이것을 할 수 없습니다 ..." – eglasius

+0

먼저, 직접 액세스해야합니다. ~ someProperty 값. 둘째,이 속성에는 몇 가지 메서드와 속성이 있습니다. 하지만 당신의 대답은 내 질문을 해결할 수 없습니다. –

2

예,이 같은 속성으로 자바 스크립트 기능을 할당 할 수 있습니다 :

someVariable.someProperty = function (arg1, arg2) { 
    // function code goes here 
}; 

이 기능 리터럴을 사용하는 방법입니다.

또 다른 방법은 다음과 같이 함수 인스턴스를 사용한다 : 두 번째 방법에있어서, 코드는 마지막 파라미터 function 키워드로 들어가

someVariable.someProperty = new Function (arg1, arg2, code); 

참고있어서 1 대로서 대문자 'F'를 갖는다 여기서 'f'는 작습니다.

또한 루프 내에서 함수 인스턴스를 생성하면 메모리에 비효율적 인 할당 할 전체 인스턴스가 새로 만들어집니다. 이 문제는 함수 리터럴 메서드를 사용하는 동안 발생하지 않습니다.

+0

이해가 안됩니다. someVariable.someProperty 값에 직접 액세스 할 수 있습니까? –

+0

그런 다음 someVariable.someProperty를 함수 인 것처럼 호출 할 수 있습니다. 마찬가지로 var c = someVariable.someProperty (a, b) – notJim

+0

그것은 내 요점이 아닙니다. 당신의 대답은 객체로 메서드를 설정하는 것입니다. –

0

방금 ​​답변을 찾았습니다. 매우 간단합니다. & 깨끗합니다.

function createProperty(value, defaultValue, ruleCollection) 
{ 
    this.value = value; 
    this.defaultValue = defaultValue; 
    this.ruleCollection = ruleCollection;  
} 

createProperty.prototype.toString = function() 
{ 
    return this.value; 
}; 

var someVariable = 
{ 
    someProperty: new createProperty 
    (
     'currentValue', 
     'defaultValue', 
     null 
    ) 
}; 

테스트를 위해 다음 코드를 사용할 수 있습니다.

var test = ">>" + someVariable.someProperty + "<<"; 

// this alert must shows ">> currentValue <<" 
alert(test); 


someVariable = 
{ 
    someProperty: new createProperty 
    (
     7, 
     5, 
     null 
    ) 
}; 

test = someVariable.someProperty + 3; 

// This alert must shows "10" 
alert(test); 

난 그냥 잘 작동 FF 3.5 & IE 8에서 테스트!

업데이트

아차! 나는 그것을 잊어 버린다. 이 기법은이 속성에 대한 객체 참조를 반환하기 때문입니다. 따라서 속성 데이터를 직접 설정하는 것은 불가능합니다. 나의 마지막 대답이 아니다.

2

그 수 있지만

function SomeDataType(){ 
    var localProperty=""; 
    this.someProperty = function(txt){ 
     if (arguments.length==0) 
      return localProperty; 
     else 
      localProperty=txt; 
    }  
    this.someProperty.isValid = function(){ 
     return (localProperty!="") ? true : false; 

    }; 
} 

대신 속성으로 someProperty을 정의하는 코드에 아래 변화, 값이 전달하거나 리턴 버리는 경우 로컬 속성 값을 설정하는 함수를 정의한다 인수가없는 경우 해당 속성 값.

var someVariable = new SomeDataType(); 
someVariable.someProperty("test"); 
alert(someVariable.someProperty()); 

var isValid = someVariable.someProperty.isValid(); 

이렇게하면 SomeDataType 개체에 액세스해야합니다.

+0

죄송합니다. 제 대답을보십시오. –

+0

@Soul_master, 방금 대답을 확인했습니다. 어디서나 someProperty 속성의 isValid에 액세스 할 수 있습니다. 그건 불가능 해. 그게 내가이 해결 방법을 준 이유이다. – RameshVel

+0

someProperty에 추가하지 않는다. 왜냐하면이 문제의 핵심은 내부 속성과 내부 메서드가있는 속성에 직접 액세스하는 방법이기 때문이다. –

0

아마도이 도움이 될 것입니다 :이 내부 메서드 또는 속성을 많이 가지고 있기 때문에이 작업을 수행 할 수

var SomeVar = { 
    someProperty : { 
    value : 7, 
    add : function (val) { 
     this.value += parseInt(val, 10); 
     return this; 
    }, 
    toString : function() { 
     return this.value; 
    } 
    } 
} 

alert(SomeVar.someProperty.add(3)); 
관련 문제