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 사양에 명시되어 있습니다