프로토타입 체인을 이용하여 지방자치단체를 연결하는 방법을 작성합니다. 프로토타입 체인을 이용하여 확장할 수 있도록 초기 함수에 변수를 넣습니다. 초기화에는 문제가 없었지만 onchange를 사용하여 지방이나 도시를 선택할 때 문제가 발생했습니다. onchange.예, 분명히 AddressInit에서 초기화했지만 감지되지 않았습니다. 해결책을 알려주실 수 있나요?
코드:
//이것은 json의 짧은 부분입니다
//이것은 HTML입니다
으아아아//js입니다
으아아아
콜백 함수를 사용하려면 올바른 환경이 필요합니다.
이 줄을 넣어주세요
으아아아가
로 변경되었습니다. 으아아아위에서 언급했듯이 이 포인터에는 문제가 있습니다.
this.selectProvince.onchange = this.changeProvince;
this.selectProvince.onchange = this.changeProvince;
你的意思是指select的change事件的处理函数为
this.changeProvince
, 即对其的一个引用。实际也就是如下:
能看出问题了吗?事件处理函数中的
this
指的是dom对象,即document.getElementById(selectProvince)
它上面当然没有你需要的东西了。可以如楼上所言的换为
this.selectCity.onchange = this.changeCity.bind(this)
this.selectCity.onchange = this.changeCity;
这样写 只是表示selectCity.onchange 也是this.changeCity
这个函数,在js中,this的指向是实际运行时才决定,在onchange事件触发时,this.changeCity
函数内的this
为dom元素,所以就出错了。bind
方法可以替换函数内的this
指向,生成一个新的函数。即
select의 변경 이벤트 핸들러 함수가 이를 참조하는this.changeCity.bind(this)
这句在运行时,已经将this.changeCity
函数内的this
替换为了当前的this
this.changeProvince
라는 뜻입니다. 🎜 🎜실제로는 다음과 같습니다. 🎜 으아아아 🎜문제가 보이나요? 이벤트 처리 함수의this
는 dom 개체, 즉document.getElementById(selectProvince)
를 참조합니다. 물론 여기에는 필요한 것이 없습니다. 🎜 🎜위에서 언급한 대로this.selectCity.onchange = this.changeCity.bind(this)
🎜로 변경할 수 있습니다. 🎜this.selectCity.onchange = this.changeCity;
이렇게 작성하면 selectCity.onchange가 js에서this.changeCity
함수이기도 함을 의미합니다. 실제 런타임 onchange 이벤트가 발생했을 때this.changeCity
함수의this
가 dom 요소인 것으로 판단되어 오류가 발생했습니다.bind
메소드는 함수 내의this
포인터를 대체하고 새 함수를 생성할 수 있습니다. 🎜 🎜즉,this.changeCity.bind(this)
문장이 실행될 때this.changeCity
함수의this
가 다음으로 대체되었습니다. 현재this
(this this는 인스턴스 개체를 나타냄)를 사용하여 필요한 효과를 얻습니다. 🎜