>  기사  >  웹 프론트엔드  >  JS 시뮬레이션 객체지향 종합 솔루션(2. 유형 및 할당)_javascript 기술

JS 시뮬레이션 객체지향 종합 솔루션(2. 유형 및 할당)_javascript 기술

WBOY
WBOY원래의
2016-05-16 18:04:581021검색

유형 할당은 변수 전달 문제와 유사합니다.
말할 필요도 없이 기본 데이터 유형은 값으로 전달됩니다.

코드 복사 코드는 다음과 같습니다.

var a=5; b=a ;
b=3;
alert(a);//Hint 5
alert(b);//Hint 3

이 관점에서 변수의 값이 앞뒤로 전달되고 변수 자체와는 아무 관련이 없기 때문에 b를 변경해도 a는 변경되지 않는 것으로 나타났습니다.
객체 유형, 통과 주소.

코드 복사 코드는 다음과 같습니다.
var a=new Object()
a.x =5;
var b=a;
b.x=3;
alert(a.x);//프롬프트 3
alert(b.x);//프롬프트 3

이렇게 주소 전달로 인해 b는 a이고 a는 b가 되면서 서로 바뀌게 됩니다.
아직도 불명확하다면 또 다른 예를 들어보세요.

코드 복사 코드는 다음과 같습니다.
var a=new Object();
a.x=5;
var b=a;
alert(b.x);//프롬프트 5, b.x는 a.x이며 둘 다 5입니다. a.x=3 ;//a.x를 변경하여 b.x를 변경하면 둘 다 3
alert(a.x);//프롬프트 3
alert(b.x);//프롬프트 3


그러나, 객체 유형 서로의 속성에 값을 할당하는 것은 객체 유형과 관련이 없으며 오히려 해당 속성의 유형과 관련이 있습니다.
속성이 기본 데이터 유형이면 값이 전달되고, 객체 유형이면 주소가 전달됩니다. 예를 들어 간단하게 만들어 보겠습니다.


var a=new Object();
a.x=5; var b=new Object();
b.x=3; // 팁 5
alert (b.x); //팁 3


위에서 앞뒤로 할당된 것은 서로 다른 두 개체의 속성일 뿐이며 둘 다 서로 분리되어 있어 기본 데이터 형식입니다. 가치를 서로에게 전달하며 서로 영향을 미치지 않습니다.


코드 복사 코드는 다음과 같습니다. var a=new Object()
a.x =5;
var b=a.x;
b=3;
alert(a.x);/prompt/5
alert(b);//prompt 3


이것은 b의 기본 데이터 유형과 a의 기본 데이터 유형의 속성 x가 서로 할당된 것이며 서로에게만 값을 전달하는 것입니다. 다른.
그러나 객체의 속성도 객체 유형인 경우에는 주소로도 전달됩니다.



코드 복사 코드는 다음과 같습니다. var a=new Object()
a.x =new Object;
a.x.n=5;
var b=a.x;
alert(b.n);//Prompt 5
b.n=3;//이것은 또한 a.x의 n을 변경합니다.
Alert(a.x.n);//Prompt 3
alert(b.n);//Prompt 3


객체의 x 속성은 Object 객체 유형으로 정의됩니다. 따라서 b에 a.x 값이 할당되면 상호 운용이 가능하며 실제로는 동일하며 서로 영향을 주고 변경할 수 있습니다.
————
그런데 객체형 변수에 값을 할당하고 싶다면 '너는 나, 나는 너'의 영역과 고귀한 인물의 영역에 도달하는 대신 속성만 복사하게 됩니다. "함께 살고 죽는다" . 무엇을 해야 할까요?
특별히 좋은 방법은 없고, 다음 기능을 이용하시면 됩니다.



코드 복사 코드는 다음과 같습니다. var DeepCopy = function(destination, source)
{
for (소스의 var 속성)
 {
var copy = source[property]
if ( Destination === copy )
if ( typeof copy = == " 객체" )
  {
destination[property] = DeepCopy(destination[property] || {}, copy)
  }
    else
  
  }
}
반환 대상; 🎜>
코드는 다음과 같습니다.


var a=new Object
a.x=5; >var b=new Object;
DeepCopy(b,a);
alert(b.x);//프롬프트 5
alert(b.y);//프롬프트 3
b.x=8; >alert(a.x);//프롬프트 5

보세요, b.x를 수정해도 a.x에는 영향을 미치지 않죠?
이 DeepCopy는 좋은 기능입니다.
위는 객체 유형의 "값 전달"을 시뮬레이션한 것입니다.
그럼 기본 데이터 유형의 "주소 전달"을 어떻게 시뮬레이션할 수 있습니까?
그냥 배열 객체를 사용하세요.
코드 복사 코드는 다음과 같습니다.

함수 변경(a)
{
a[0]=5;
alert(a); // 팁 5
}
var x=[3]
alert(x); >change( x);
alert(x); // 팁 5

[xx]를 할당하는 것은 실제로 데이터가 있는 배열 개체를 할당하는 것입니다. 여기서는 하나의 요소를 포함하는 배열을 사용하여 주소 전송을 시뮬레이션합니다. 배열은 객체형이므로 전달할 때 주소로 전달됩니다.
물론 모든 개체 유형의 속성을 사용하여 시뮬레이션할 수도 있습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.