>  기사  >  웹 프론트엔드  >  JS 클래스 정의 프로토타입 method_js 객체 지향의 두 구현 간의 차이점에 대한 많은 의견이 있습니다.

JS 클래스 정의 프로토타입 method_js 객체 지향의 두 구현 간의 차이점에 대한 많은 의견이 있습니다.

WBOY
WBOY원래의
2016-05-16 19:08:59943검색

우리는 JavaScript 클래스에 프로토타입 메소드를 추가하는 것이 매우 간단하다는 것을 알고 있습니다. 그리고 다음의 두 가지 방법이 공통적으로 사용되는데, 이 두 가지 방법을 사용하는데 있어서 차이점이 있나요?
JScript 클래스:

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

function JSClass( )
{ >

JSClass.prototype.MethodA = function()
{

}; 코드 복사


코드는 다음과 같습니다.


function = JSClass.prototype.MethodA()
{

};

# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 더 많은 댓글
먼저 간단한 차이점에 대해 이야기하겠습니다. 이 두 메서드로 가져온 프로토타입 메서드는 첫 번째 메서드가 익명 메서드입니다. 두 번째 메소드의 메소드 이름은 "JSClass.prototype.MethodA"입니다.
2005-03-01 10:52 |birdshome
# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 댓글 더보기
<script> function JSClass() <br>{ <br>} <br><br>function = JSClass.prototype.MethodA() <br>{ <br><br>} <br></script>

프롬프트 오류입니다.
2005-03-01 13:51 | 阮
# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 더 많은 댓글
희미합니다. FreeTextBox가 소량의 데이터를 수정하는 것으로 나타났습니다( 한두 글자 )제출이 효과가 없는 경우가 있습니다.(
실수로 "="를 추가로 썼는데 수정한 기억이 납니다.
2005-03-01 14:00 |birdshome
# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 더 많은 댓글
실제로 이 두 프로토타입 정의 메서드는 논의를 위해 단순화될 수 있습니다. 먼저 다음과 같이 두 함수로 처리합니다.
Foo1( );

function Foo1()
{
Alert('Foo1입니다.');
}
및 Foo2()
var Foo2 = function()
{
Alert('This is Foo2.');
}

당연히 첫 번째 실행 시에는 오류가 발생하지 않지만 두 번째 실행 시에는 문제가 발생합니다. 시간이 지나면 시스템은 다음과 같이 말합니다. Microsoft JScript 런타임 오류: 개체가 필요합니다. 이는 함수 정의(Foo1)가 스크립트 파서에서 가장 높은 초기화 우선 순위를 갖는다는 것을 의미합니다. 이는 함수가 먼저 처리되지 않으면 이해하기 쉽습니다. 함수 호출을 처리할 방법이 없습니다. 먼저 fn1()을 정의한 다음 fn1에서 fn2를 호출하면 Foo2가 초기화되지 않습니다. Foo2는 전혀 함수 정의가 아닙니다. Foo2(Foo2())를 표준 함수처럼 사용할 수 있는 이유는

2005-03-03 22: 17 |birdshome
# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 추가 댓글
프로토타입 메서드를 가져오는 두 가지 방법을 살펴보겠습니다. 매우 간단합니다. .또한 실행 우선순위에 따라 사용상의 차이가 결정됩니다.


실행:
new NormalClass(); 🎜> nc.Method1();
nc.Method2()

효과는 무엇인가요? 왜?


2005-03-03 22:21 |birdshome
# re: JS 클래스 정의 프로토타입 메소드의 두 구현 간의 차이점 답변 추가 댓글
최종 결과는 실제로 nc.Method1입니다. ()가 정의되어 있지 않으면 nc.Method2()가 정상적으로 실행됩니다.
사실 InnerClass.prototype.Method1 = function()이 할당 문의 실행에 의존하는 반면 function InnerClass.prototype.Method2()는 우선 순위가 가장 높은 스크립트 엔진에 의해 초기화된다는 것은 놀라운 일이 아닙니다.
2005-03-05 02:43 | Birdshome
# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 추가 댓글
Antechinus JavaScript Editor에서 코드를 테스트했습니다.

함수 InnerClass.prototype.Method2()는 오류를 보고합니다.

SyntaxError:missing( 형식 매개변수 이전 참조: .prototype.Method2(
2005-05-10 17:11 | 오류
# re: JS 클래스 정의 프로토타입 메서드의 두 가지 구현 간의 차이점 답변 추가 댓글
@Error
IE로 시도해 보셨나요?
2005-05-10 17:30birdshome
# re: JS 클래스 정의 프로토타입 메소드의 두 구현 간의 차이점 답변 추가 댓글
또한 FF를 사용할 때 동일한 오류가 발생합니다: 누락( 형식 매개변수 이전 참조: .prototype.Method2(
2006-08-19 22: 40 | jzz
# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 추가 댓글
return new InnerClass(); 이 줄을
function InnerClass.prototype.Method2()로 이동하세요.
{
alert(this.m_Property2);
};
다음 ie 실행은 정상입니다. FF 오류 보고: 형식 매개변수 이전 참조: .prototype.Method2(
ie 순차 실행 예, 하지만 NS 시리즈는 그렇지 않습니다!
FF가 InnerClass.prototype.Method2() 함수를 실행할 때 이 InnerClass 클래스가 있는지 전혀 모르므로 당연히 프로토타입 같은 것이 나오지 않습니다. 이유 없이 xxx
2006-11-13 00:57 | Doutu
# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 추가 댓글
@Doutu
Put return new InnerClass (); into function InnerClass.prototype.Method2() 메서드 이후에는 이 예제를 작성하려는 원래 의도를 완전히 위반합니다.이 예는 IE가 함수 정의 형식 function foo()에 대해 더 높은 구문 분석 우선순위를 갖는 반면 foo = function()은 일반적인 할당 문일 뿐임을 보여줍니다. ff의 상황에 대해서는 연구하지 않았습니다. ff가 반환 후 InnerClass를 찾을 수 없다고 말씀하셨기 때문에 순차 구문 분석 함수 foo()가 정의된 형식이라는 의미입니다.
2006-11-13 01:29 |birdshome
# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 댓글 더보기
한숨. 즉, 오직 사용할 수 있는 가난한 사람들. 함수 x.y.z() {}의 쓰기 방법은 단순히 비표준 쓰기 방법입니다. ff 또는 Opera와 같은 다른 js 엔진에서는 오류를 보고합니다. 표준을 충족하는 유일한 작성 방법은 x.y.z = function () {};

물론 문법적인 측면에서 볼 때 저는 이 작성 방법을 꽤 좋아하며 향후 표준에도 이 작성 방법이 채택되기를 바랍니다.
2006-11-28 11:04 | hax
# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 추가 댓글
ㅋㅋㅋ hax가 맞습니다. IE만이 엄마처럼 아이들의 온갖 실수를 용납할 수 있습니다

표준 쓰기 방법은 x.y.z = function() {}뿐입니다.

사실 IE는 더 이상한 쓰기 방법도 지원합니다.

이것을 보세요
함수 window::onload(){
alert("go_rush")
}
2006-11-28 14:39 | Go_Rush
# re: JS 클래스 정의 프로토타입 메서드의 두 구현 간의 차이점 답변 추가 댓글
@hax
표준이 아무리 훌륭하더라도 여전히 이에 대한 논쟁은 학계와 엔지니어 사이의 문제입니다. 잘 구현해보자. 우리만의 시스템이면 충분하다. 왜 굳이 신들과 싸워야 하는가.
// 귀하의 의견은 실제로 꽤 좋습니다. 윽 IE 때문에 안타깝네요~~
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.