>웹 프론트엔드 >JS 튜토리얼 >JavaScript_javascript 팁에서 보이지 않는 데이터 유형 구문 분석

JavaScript_javascript 팁에서 보이지 않는 데이터 유형 구문 분석

WBOY
WBOY원래의
2016-05-16 17:11:18998검색

JS는 우리가 프로그래밍할 수 있도록 Math, ParseInt, Object, Array 등과 같은 내장 객체, 함수 및 생성자를 제공합니다. 이는 모두 표시되며 프로그래밍 중에 사용할 수 있습니다. 예를 들어 새 개체나 새 배열을 사용할 수 있습니다.

일부 개체는 보이지 않으며 이러한 개체는 특별한 상황에서만 엔진에 의해 제공될 수 있습니다. 이러한 유형의 개체에는 기능이 저하되는 경우가 많습니다. 다음은

입니다.

1. 인수 유형
인수 유형은 프로그래머가 수동으로 만들 수 없습니다. 즉, 새 Arguments()를 만들 수 없습니다. 객체 인수는 하나만 있습니다

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

function func () {
console.log(arguments[0]) // 1
console.log(arguments.length) // 3
}
func(1, 2, 3)

인수 개체는 함수가 호출될 때 생성되며 함수 내에서만 표시되고 사용됩니다. 인수는 Array와 매우 유사하고 요소는 인덱스로 검색할 수 있으며 길이 속성도 있음을 알 수 있습니다. 하지만 Array가 아닙니다. Push, Pop 등의 Array 메서드가 없습니다. 인수는 ES5 10.6에 정의되어 있습니다.

2. 바인딩이 반환하는 함수는 매우 특별합니다.
bind는 ES5에서 Function.prototype에 추가한 새로운 메서드로 call/apply와 같은 함수에서 직접 호출됩니다. 지정된 컨텍스트와 매개변수가 포함된 함수를 반환합니다.

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

function func(age) {
console.log ('이름: 'this.name', 경력: '나이)
}
var person = {이름: 'John McCarthy'}
var f1 = func.bind(person, 'computer Scientist')
f1() // 이름: John McCarthy, 직업: 컴퓨터 과학자

반환된 함수 f1이 일반 함수처럼 괄호를 사용하여 호출되는 것을 볼 수 있습니다. 모든 것이 잘 작동하지만 다음 코드는 여러분을 놀라게 할 것입니다
코드 복사 코드는 다음과 같습니다.

function func(age) {
console.log('name: 'this.name', Career: 'age)
}
var person = {name: 'John McCarthy'}
var f1 = func.bind(person, 'computer Scientist')
console.log(f1.prototype) // 정의되지 않음

위 코드와 비교하면 마지막 문장이 다릅니다. f1()이 실행되지 않았지만 f1.prototype을 인쇄했는데 정의되지 않은 것으로 나타났습니다.

이상한가요? 모든 함수에는 프로토타입 상속을 구현하는 데 사용되는 프로토타입 속성이 있지 않습니까? 실제로, 바인드에 의해 반환된 함수는 특별합니다. 프로토타입이 없습니다. 이 특수 함수는 JS 엔진에 의해 생성되며 함수 선언이나 함수를 통해 클라이언트 프로그래머가 직접 측정할 수 없습니다.

이 내용은 ES5 15.3.4.5 사양에 명시되어 있습니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.