ProgramingTip

자바 펼쳐에서 클래스 클래스 속성을 추가 할 수없는 이유는 무엇입니까?

bestdevel 2020. 12. 4. 19:51
반응형

자바 펼쳐에서 클래스 클래스 속성을 추가 할 수없는 이유는 무엇입니까?


다른 개발자가 선언하는 자바 스크립트를 사용합니다. 그는 우리가 프로젝트 전체에서 그리드 구성 요소를 좋아하지 결정기 때문에 직접 작성하기로 결정했습니다. 당신이 있기 때문에 날짜를 보낼 수 없습니다. 그는 모든 날짜를 전에 사용하기 전에 변환합니다. 날짜 날짜에 날짜 속성이 있는지 확인하고 기준으로 할 수 있습니다. 그러나 자바 언어의 확장에 속성을 추가 할 수 있습니다. 속성을 추가 할 수없는 특정 유형이 있는지 몰랐습니다. 예를 들면 :

<html>
<script>
var test = "test";
test.test = "test inner";
console.log(test);
console.log(test.test);
</script>

test.test는 정의되지 않습니다. 기묘한. 내 질문은이 코드가 작동하지 않는 이유입니다. 또한 그리드 해당 날짜를 정렬하기위한 해결 방법을 생각할 수있는 것 (실제로 될 대신 날짜를 바인딩하는 것 외에) 정말 도움이됩니다.


JavaScript에는 6 가지 언어 유형이 있습니다.

  • 5 가지 기본 유형 : String , Number , Boolean , Null , Undefined
  • 기본이 아닌 유형 1 개 : 개체

기본 유형의 값을 기본 값이라고하며 속성을 수 없습니다. 객체 가 프리미티브가 아닌 유형
의 값 은 속성을 발생시킬 수 있습니다.

다음 과 같이 'bar'변수에 이름이 지정된 속성을 할당하려고 할 때 foo:

foo.bar = 'abc';

결과는 다음 값의 유형에 따라 달라 foo집니다.

(a) 의 값이 Undefined 또는 Nullfoo 유형 이면 오류가 발생합니다.

(b) 의 값이 개체foo 유형 이면 명명 된 속성 이 개체에 정의되고 (필요한 경우) 해당 값이로 설정 됩니다.'bar'foo'abc'

(c) 의 값이 숫자 , 문자열 또는 부울foo 유형 인 경우 변수 는 어떤 식 으로든 변경되지 않습니다. 이 경우 위의 할당 작업은 noop이 입니다.foo

따라서 보시다시피 속성을 변수에 할당하는 것은 해당 변수가 객체에만 의미가 있습니다. 어떤 경우에도 할당은 아무 작업도 수행하지 않고 오류를 발생합니다.


귀하의 경우 변수 test에는 String 유형의 값이 포함되어 있습니다.

test.test = "test inner";

아무것도하지 않습니다.


그러나 ES5는 접근 자 속성을 도입하기 때문에 예외가 있습니다. 접근 자 속성을 사용하면 속성이 검색되거나 설정 될 때마다 호출되는 함수를 정의 할 수 있습니다.

예를 들면 :

var str = '';
str.prop;

다음 str높은 값을 보유하는 변수 입니다. 따라서 해당 변수의 속성에 액세스하는 것은 no-op이어야합니다 ( str.prop단지 반환 undefined). 한 가지 예외가 String.prototype있습니다 'prop'. 정의 된 게터 가있는 접근 자 속성 포함 된 경우 해당 게터가 호출됩니다.

따라서 이것이 정의 된 경우 :

Object.defineProperty( String.prototype, 'prop', {
    get: function () {
        // this function is the getter
    }
}); 

다음이

str.prop;

getter 함수를 호출합니다.

라이브 데모 : http://jsfiddle.net/fmNgu/

그러나 기본 제공 방법 제공 방식에 접근 자 속성을 추가하는 것이 좋습니다.


String 객체를 사용하는 경우 속성을 추가 할 수 있습니다.

var test = new String("test");
test.test = "test inner";
console.log(test.toString()); // prints out "test"
console.log(test.test); // prints out "test inner"

참고 URL : https://stackoverflow.com/questions/5201138/why-cant-i-add-properties-to-a-string-object-in-javascript

반응형