superSay.call(this)
为什么会是People.prototype.say
函数被调用?this
가 가리키는 사람은 누구인가요? 曾经蜡笔没有小新2017-06-26 10:55:14
확인을 위해 Student{}
类,这个你可以在superSay.call(this)
上面加一行console.log(this)
를 가리킵니다.
그럼 이 코드를 살펴보겠습니다
으아악나중에 설명의 편의를 위해 여기서는 new People()
이 생성한 인스턴스를 Instance X
라고 부릅니다. new People()
创建的实例称为实例X
。
由于superSay = Student.prototype.say
,因为上面的Student.prototype = new People();
,所以其中Student.prototype
为实例X
。
所以实际上superSay
调用的是实例X
的say
,而并非People.prototype.say
superSay = Student.prototype.say
이고 위의 Student.prototype = new People();
이므로 Student.prototype
은 InstanceX
.
superSay
는 People.prototype.say
가 아닌 Instance X
의 say
를 호출합니다.
People.prototype.say
,主要还是原型链的问题。实例X
是People类的一个实例,所以实例X
的所有方法会从People类的原型链“继承”(用继承这个词,但是实际上JS的原型链和继承还是有些区别的)。所以实例X.say
如果没有针对实例X
重写say
方法,那么实例X
的say
就和People.prototype.say
전화하는 것과 동일하다고 생각하는 이유는
superSay.call(this)
这个里面的call
,只是改变了this
的上下文而已。但是由于superSay
即实例X.say
,这个方法里根本没有this
,所以this
또한
代言2017-06-26 10:55:14
개인 의견: 먼저 say 메소드를 찾는 검색 순서에 대해 이야기해 보겠습니다. s——student.prototype——people.prototype——Object를 찾으면 준비가 된 것이며 검색을 중지합니다. 코드와 결합하면 Student.prototype만 찾을 수 있습니다. 여기에서 먼저 코드를 다음과 같이 변경하여 더 명확하게 만들 수 있습니다.
으아악기타 사항은 변경되지 않습니다. 이때 s.say() - 321을 출력하고, s.jiao() - 456을 출력합니다. 그런 다음 Student.prototype.say 메소드를 재정의했기 때문에 코드로 돌아가서 이 코드가 실행됩니다
으아악첫 번째 문장 superSay.call(this), 우선 superSay는 변수이고, 변수 유형은 함수입니다. var superSay = Student.prototype.say 뒤에 console.log(typeof supperSay) 코드를 추가하면 됩니다. , 따라서 이 함수를 호출하면 이 변수에 Student.prototype.say가 저장됩니다. var superSay = Student.prototype.say로 실행합니다. 실제로 여기에 할당된 값은 People.prototype.say입니다. 이 점은 Elevation의 166-167페이지에서도 비슷합니다. 이 점과 관련하여 코드의 두 섹션을 이것으로 변경하고 나머지는 변경하지 않을 수 있습니다.
으아악이 때 superSay를 호출하면 오류가 보고됩니다. var superSay = Student.prototype.say가 실행될 때 Student.prototype에는 생성자 속성이 하나만 있고 say 메서드가 없기 때문입니다. 그런 다음 코드로 돌아가면 People.prototype.say가 superSay
에 할당됩니다. 으아악PHP中文网2017-06-26 10:55:14
위층의 잡담에 포스터가 속아버릴까 두렵지 않으신가요?
그의 프로그램에서 stuSay는 익명의 함수 객체 function(){alert("hello");}을 가리킵니다. stuSay를 다시 할당하지 않는 한, 어디서 호출하든 항상 이 함수 객체를 가리킵니다. , 항상 이렇습니다. 따라서 이것이 함수 본문 내부에서 누구를 가리키는지는 Rhinoceros 책을 읽어보세요...코뿔소 책의 기능 부분을 읽으면 포스터에 이런 문제가 없을 것입니다. 위층에 너무 많은 말도 안 되는 일이 있어서 포스터를 현기증나게 하지 마세요