이것은 함수를 정의하는 데 가장 일반적으로 사용되는 방법입니다. . 나는 JavaScript를 배우는 사람들이 그 사용법에 익숙하다고 믿습니다. 호출 코드는 다음과 같습니다. makeArray('one', 'two') // => [ window, 'one', 'two' ] 이 메서드는 다음과 같습니다. 전역 함수 호출이라고 합니다. 왜 글로벌 기능이라고 하나요? 전역 개체 창의 메서드이므로 다음 메서드로 확인할 수 있습니다. alert( typeof window.methodThatDoesntExist ) // => ( typeof window .makeArray); // => function 따라서 makeArray를 호출하는 데 사용한 메소드는 아래 호출된 메소드와 동일합니다 window.makeArray('one', 'two') ; // => [ window, 'one', 'two' ] JavaScript 함수 호출 규칙 2 (1) 객체 메서드 호출:
//객체 생성 var arrayMaker = { someProperty: 'some value here ', make: makeArray }; arrayMaker.make('one', 'two') // => [ arrayMaker, 'one', 'two' ] //또는 다음 메소드를 사용하여 호출하세요. arrayMaker['make']('one', 'two') // => [ arrayMaker, 'one', 'two' ]
여기와 지금 차이점을 확인하세요. this의 값은 객체 자체가 됩니다. 당신은 질문할 수 있습니다: 원래 함수 정의는 변경되지 않지만 이것이 변경되는 이유는 무엇입니까? 아주 좋습니다. 의심하시는 것이 맞습니다. 이는 JavaScript에서 함수가 전달되는 방식과 관련이 있습니다. 정확히 말하면 객체를 전달하거나 복사할 수 있습니다. 전체와 같습니다. function 매개변수 목록과 함수 본문이 모두 복사되고 이 arrayMaker의 make 속성에 할당됩니다. 이는 다음과 같이 arrayMaker를 정의하는 것과 같습니다.
Javascript의 유형 정의를 자세히 다루고 싶지는 않지만 지금은 Javascript에는 클래스가 없다는 것을 알고 있습니다. 또한 모든 사용자 정의 유형에는 초기화 함수가 필요합니다. 프로토타입 객체를 사용하여 유형을 정의하는 것도 좋은 생각입니다(초기화 함수의 속성으로). 만들자 간단한 유형
this.someProperty = 'whatever'; this.theArray = [ this, arg1, arg2 ] } // 인스턴스화 방법 선언 ArrayMaker.prototype = { someMethod: function () { alert( 'someMethod Called') }, getArray: function () { return this.theArray; >} }; var am = new ArrayMaker( 'one', 'two' ) var other = new ArrayMaker( 'first', 'second' ) am.getArray( ); // = > [ am, 'one' , 'two' ] other.getArray() // => [ other, 'first' ]
매우 중요하고 주목할만한 점은 함수 호출 앞에 나타나는 새로운 연산자입니다. 그것이 없으면 함수는 전역 함수와 같으며 우리가 만드는 속성은 전역에 생성됩니다. 개체(창), 그리고 당신은 그것을 원하지 않습니다. 또 다른 점은 생성자에 반환 값이 없기 때문에 new 연산자를 사용하는 것을 잊어버리면 일부 변수가 정의되지 않은 상태로 할당된다는 것입니다. 따라서 생성자 함수를 대문자로 시작하는 것이 좋은 습관입니다.
이런 식으로 초기화 함수의 코드는 다음과 같습니다. 언어로 작성된 다른 초기화 함수에서 사용하는 코드와 동일하며 이 값이 생성할 객체가 됩니다. 요약 이를 통해 차이점을 이해할 수 있기를 바랍니다. 다양한 함수를 호출하여 JavaScript 코드에 버그가 없도록 하세요. 이것의 가치를 아는 것이 버그를 피하는 첫 번째 단계입니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.