함수 Benjamin(사용자 이름, 성별) {
This.username = 사용자 이름;
This.sex = 섹스;
}
var benjamin = new Benjamin("zuojj", "남성");
//출력: Benjamin{sex: "male",username: "zuojj"}
console.log(벤자민);
var ben = Benjamin("장산", "여성");
//출력: 정의되지 않음
console.log(ben);
생성자를 일반 함수로 호출하면 반환값이 없으며 이는 전역 개체를 가리킵니다. 그렇다면 새 키워드가 부족하여 발생하는 문제를 어떻게 방지할 수 있습니까?
함수 Benjamin(사용자 이름, 성별) {
//"this"가 "Benjamin" 객체인지 확인
if(벤자민의 이 인스턴스) {
This.username = 사용자 이름;
This.sex = 섹스;
}그밖에 {
새로운 Benjamin(사용자 이름, 성별)을 반환합니다.
}
}
var benjamin = new Benjamin("zuojj", "남성");
//출력: Benjamin{sex: "male",username: "zuojj"}
console.log(벤자민);
var ben = Benjamin("장산", "여성");
//출력: Benjamin {사용자 이름: "zhangsan", 성별: "female"}
console.log(ben);
위의 예에서는 먼저 이것이 Benjamin의 인스턴스인지 확인합니다. 그렇지 않은 경우 new를 사용하여 자동으로 생성자를 호출하고 인스턴스화합니다. 즉, 더 이상 인스턴스화하기 위해 new 키워드가 누락되는 것을 걱정할 필요가 없습니다. 생성자. 물론, 우리가 이러한 현상을 피한다면 나쁜 습관이 생길 수도 있습니다. 다음과 같은 오류가 발생할 수 있습니다.
함수 Benjamin(사용자 이름, 성별) {
//"this"가 "Benjamin" 객체인지 확인
if(벤자민의 이 인스턴스) {
This.username = 사용자 이름;
This.sex = 섹스;
}그밖에 {
// 그렇지 않으면 오류가 발생합니다.
throw new Error("`new` 없이 호출된 `Benjamin`");
}
}
함수 사람() {
return this.name;
}
//Function.prototype.bind
var per = person.bind({
이름: "zuojj"
});
console.log(당);
var obj = {
이름: "벤",
사람:사람,
당: 당
};
//출력: Ben, zuojj
console.log(obj.person(), obj.per());