함수를 생성자로 사용하여 프로그래밍하는 것은 생성된 함수는 new로 호출되며 직접호출도 가능하게 되는데 new와 직접호출시에 this에 바인딩되는 객체가 달라지기에 생성자로 사용되는 함수는 대문자로 표기하며 사용을 추천하지 않는다.
Function.prototpe.method = function(name, func) {
if (!this.prototype[name]) {
this.prototype[name] = func;
}
}
위의 함수를 이용하면 다음과 같이 사용할 수 있다.
Person() 안에 setter나 getter를 사용하게 되면 new Person(); 사용시 여러개의 함수를 가지게 된다. prototype 사용시 함수객체를 여러개 생성할 필요 없이 프로토 타입 체인으로 접근한다.
Function.prototype.method = function(name, func) {
this.prototype[name] = func;
};
function Person(arg) {
this.name = arg;
};
Person.method("setName", function(value) {
this.name = value;
});
Person.method("getName", function() {
return this.name;
});
const me = new Person("me");
const you = new Person("you");
또는
function Person() {
name: this.name;
age: this.age;
}
Person.prototype.sayHello = function() {
alert('hello');
};
// 자식 함수를 정의하고 부모의 생성자를 불러옵니다.
function Student() {
Person.call(this);
}
// Person을 프로토타입을 이용해 상송합니다.
Student.prototype = new Person();
// 생성자 포인터를 자식함수로 새롭게 지정합니다.
Student.prototype.constructor = Student;
// 메서드를 재정의합니다.
Student.prototype.sayHello = function() {
alert('hi, I am a student');
};
// 새로운 메서드를 자식함수에 추가합니다.
Student.prototype.sayGoodBye = function() {
alert('goodBye');
};
'IT > JavaScript' 카테고리의 다른 글
object groupby (0) | 2020.07.19 |
---|---|
호이스팅 (0) | 2020.07.02 |
클로저 (0) | 2020.06.30 |
with (0) | 2020.06.30 |
import / export (0) | 2020.06.30 |
댓글