1. 생성자
생성자의 값은 함수입니다. JavaScript에서는 null 및 undefed 유형이 아닌 값, 배열, 함수 및 객체에 생성자 속성이 있습니다. 생성자 속성의 값은 값, 배열, 함수 또는 객체의 생성자입니다. 예:
var a = 12, // Number
b = 'str', // 문자열
c = false, // 부울 값
d = [1, 'd', function() { return 5 }], // 배열
e = { 이름: 'e' }, // Object
f = function() { return 'function' } // 함수
console.log('a: ', a.constructor ); / / Number()
console.log('b: ', b.constructor); // String()
console.log('c: ', c.constructor); )
console.log('d: ', d.constructor); // Array()
console.log('e: ', e.constructor); // Object()
console. log(' f: ', f.constructor); // 함수()
위 생성자는 모두 JavaScript에 내장되어 있습니다.
코드 복사와 같이 생성자를 사용자 정의할 수도 있습니다. 코드는 다음과 같습니다:
function A(name) {
this.name = name;
}
var a = new A('a');
console.log(a.constructor); // A(이름)
생성자를 호출할 때 new 키워드를 사용해야 합니다. 생성자는 객체를 반환합니다.
var a = 4;
var b = new Number(4);
console.log('a : ', typeof a) ; // a: 숫자
console.log('b: ', typeof b) // b: 객체
2. 프로토타입
프로토타입은 함수의 속성입니다. 기본적으로 함수의 프로토타입 속성 값은 함수와 동일한 이름을 가진 빈 개체입니다. 물체. 예:
function fn() {}
console .log(fn.prototype); // fn { }
prototype 속성은 주로 다음과 같이 JavaScript에서 상속을 구현하는 데 사용됩니다.
function A(이름) {
this.name = 이름;
}
A.prototype.show = function() {
console.log(this. name);
};
function B(이름) {
this.name = 이름;
}
B.prototype = A.prototype;
var test = new B('test');
test.show() // 테스트
여기에 문제가 있습니다. 테스트 생성자는 실제로 함수 B가 아닌 함수 A입니다.
console.log(test.constructor); // A(name)
B.prototype = A.prototype이 B의 생성자를 변경하기 때문입니다. 프로토타입을 A로 변경하므로 B.prototype의 생성자를 복원해야 합니다.
함수 A( 이름) {
this.name = 이름;
}
A.prototype.show = function() {
console.log(this.name) ;
};
함수 B(이름) {
this.name = 이름;
}
B.prototype = A.prototype;
B. 프로토타입.constructor = B;
var test = new B('test');
test.show() // 테스트
console.log(test.constructor); // B(이름)
이 작업을 수행하는 이유는 프로토타입의 값이 객체이고 생성자, 즉 생성자 속성의 값이 프로토타입이 속한 함수, 즉
console.log(A.prototype.constructor === A); >