Tencent 프런트 엔드 인터뷰 질문 (1)

1. 다음과 같은 클래스가 있습니다.

function Person(name) {
    this.name = name
}

let p = new Person('Tom');

1. p._proto_는 무엇입니까?

답변 : Person.prototype

2. Person._proto_는 무엇과 같습니까?

답 : Function.prototype

분석:

1, 2는 모두 프로토 타입 체인에 대한 지식과 관련된 동일한 문제입니다. 한 문장 만 기억하십시오 : 인스턴스의 _proto_ 속성 (프로토 타입)은 생성자의 프로토 타입 속성과 같습니다 . 인스턴스 p의 생성자는 Person이고 Person의 생성자는 Function입니다.

유추로 이해하다

var f = {}
    F = function (){};
Object.prototype.a = 'value a';
Function.prototype.b = 'value b';

console.log(f.a)
console.log(f.b)
console.log(F.a)
console.log(F.b)

결과:

값 a;

찾으시는 주소가 없습니다;

값 a;

값 b;

분석:

f는 Object의 인스턴스이고, F는 Function의 인스턴스이며, 객체의 속성은 프로토 타입 체인을 따라 레이어별로 조회됩니다. 찾을 수없는 경우 시작되지 않습니다.

3. 줄기를

function Person(name) {
    this.name = name
    return name
}
let p = new Person('Tom')

Person 인스턴스화 중에 Person은 무엇을 반환합니까 (또는 p는 무엇입니까)?

대답:

 {name: "Tom"}

4. 줄기를

function Person(name) {
    this.name = name
    return {}
}
let p = new Person('Tom');

Person 인스턴스화 중에 Person은 무엇을 반환합니까 (또는 p는 무엇입니까)?

{}

분석:

생성자에는 명시적인 반환 값이 필요하지 않습니다. new를 사용하여 객체를 생성 할 때 (생성자 호출) 반환이 객체가 아닌 경우 (숫자, 문자열, 부울 등) 반환 값이 무시되고 반환이 객체이면 객체가 반환됩니다 (참고 : 반환 null도 반환 값을 무시하십시오).

5. typeof와 instanceof의 차이점

자바 스크립트에서 typeof 연산자는 변수의 유형을 결정하는 데 자주 사용됩니다. typeof 연산자를 사용하여 참조 유형을 사용하여 값을 저장하면 문제가 발생합니다. 어떤 유형의 객체를 참조하더라도 항상 'object'를 반환합니다.

instanceof 연산자는 객체의 프로토 타입 체인에 생성자의 프로토 타입 속성이 있는지 여부를 테스트하는 데 사용됩니다. 구문 : object instanceof constructor 매개 변수 : object (검출 할 객체) constructor (생성자) 설명 : instanceof 연산자는 constructor.prototype이 매개 변수 객체의 프로토 타입에 존재하는지 여부를 감지하는 데 사용됩니다.

6. Student가 Person에서 상속을 받으면 (Student 클래스는 Person을 상속하고 프로토 타입을 기반으로 한 상속이 필요함) let s = new Student ( 'Lily'), 그러면 s instanceof Person은 무엇을 반환합니까?

function Person(name) {
    this.name = name
}
function Student() {

}

Student.prototype = Person.prototype;
Student.prototype.constructor = Student;

let s = new Student('Tom');
console.log(s instance Person);

답 : 참

7. new와 instanceof의 내부 메커니즘

1. 创建一个新对象,同时继承对象类的原型,即Person.prototype;
2. 执行对象类的构造函数,同时该实例的属性和方法被this所引用,即this指向新构造的实例;
3. 如果构造函数return了一个新的‘对象’,那么这个对象就会取代真个new出来的结果,如果构造函数没有return对象,那么就会返回步骤1所创建的对象,即隐式返回this。(一般情况下构造函数不会返回任何值,不过在一些特殊情况下,如果用户想覆盖这个值,可以选择返回一个普通的对象来覆盖)

 

추천

출처blog.csdn.net/RedaTao/article/details/85118891