객체를 작성하는 몇 가지 방법
1. 공장 모델
인터페이스로 봉인하여 특정 인터페이스로 대상을 만드는 세부 사항//단점: 대상은 식별할 수 없습니다. 모든 실례가 원형을 가리키기 때문입니다.
var log = console.log.bind(console)
function creatPerson(name) {
var o = new Object()
o.name = name
o.getName = function () {
console.log(this.name);
};
return o
}
var person = creatPerson('haha')
var person1 = creatPerson('haha')
log(1111, person.__proto__) // Object
log(2222, person1.__proto__) // Object
2. 구조 함수 모드
//장점: 실례는 특정한 유형으로 식별할 수 있다//단점: 실례를 만들 때마다 모든 방법이 한 번씩 만들어져야 한다
var log = console.log.bind(console)
function Person(name) {
this.name = name
this.getName = function() {
log(this.name)
}
}
var person2 = new Person('meimei')
var person3 = new Person('meimei1')
log(person2.name) //meimei
// Person, ,
log(3333, person2.__proto__.constructor.name)
log(person2.getName == person3.getName) //false
2.1 구조 함수 모델 최적화
장점: 모든 방법이 다시 만들어져야 하는 문제점과 단점을 해결했다: 이게 무슨 봉인이야...
var log = console.log.bind(console)
function Person1(name) {
this.name = name;
this.getName = getName;
}
// ,
function getName() {
console.log(this.name);
}
var person4 = new Person1('kevin');
var person5 = new Person1('kevin1');
log(4444, person4.__proto__.constructor.name) // "Person1"
log(person4.getName == person5.getName) //true
3. 원형 모드
//장점: 방법은 다시 만들지 않는다//단점: 1.모든 속성과 방법을 공유합니다 2.매개변수를 초기화할 수 없습니다.
var log = console.log.bind(console)
function Person2() {}
// name
Person2.prototype.name = 'hah'
Person2.prototype.getName = function(){
console.log(this.name);
}
var person6 = new Person2(); // name
log(5555, person6.__proto__.constructor.name) // "Person2"
3.1 원형 모델 최적화
//장점: 봉인성이 좀 좋아졌고 실례는 constructor 속성을 통해 소속 구조 함수를 찾을 수 있습니다//단점: 원형을 다시 썼는데 원형 모델이 있어야 할 단점이 있습니다
var log = console.log.bind(console)
function Person3() {}
Person3.prototype = {
coustructor: Person3,
name: 'hah',
getName: function(){
console.log(this.name);
}
}
var person7 = new Person3(); // name
log(6666, person7.__proto__.coustructor.name) // "Person3"
4. 구조 함수 모드와 원형 모드를 조합하여 사용
//장점: 이 공유의 공유, 이 사유의 사유, 가장 광범위한 방식을 사용한다//단점: 어떤 사람들은 모두 함께 쓰기를 원한다. 즉, 더욱 좋은 봉인성이다.
var log = console.log.bind(console)
function Person4(name) {
this.name = name
}
Person4.prototype.getName = function(){
console.log(this.name);
}
var person8 = new Person4('haha');
log(7777, person8.__proto__.constructor.name) // "Person4"
4.1 동적 원형 모델
var log = console.log.bind(console)
function Person5(name) {
this.name = name
if(typeof this.getName != 'function') {
// : ,
Person5.prototype.getName = function() {
log(this.name)
}
}
}
var person9 = new Person5('meimei')
log(8888, person9.__proto__.constructor.name) // "Person5"
5.1 기생 구조 함수 모델
//기생-구조함수-모드, 즉 구조함수에 기생하는 방법이다.단점: 생성된 실례는 instanceof를 사용해도 구조 함수//특수한 상황에서 사용할 수 없습니다. 추가 방법이 있는 특수한 그룹을 만들고 싶지만 Array 구조 함수를 직접 수정하고 싶지 않습니다.
var log = console.log.bind(console)
function Person6(name) {
var o = new Object()
o.name = name
o.getName = function() {
log(this.name)
}
return o
}
var person10 = new Person6('meimei') // new, 2
console.log(person10 instanceof Person) // false
console.log(person10 instanceof Object) // true
log(9999, person10.__proto__.constructor.name) // Object
5.2 온당한 구조 함수 모델
//기생 구조 함수 모델과 두 가지가 다르다.//1) 새로 만든 실례 방법은this//2)를 인용하지 않는다. new 조작부호를 사용하지 않고 구조 함수를 호출한다//온당한 대상은 일부 안전한 환경에 가장 적합하다.온당한 구조 함수 모델도 공장 모델과 마찬가지로 대상 소속 유형을 식별할 수 없다.
var log = console.log.bind(console)
function Person7(name){
var o = new Object();
o.sayName = function(){
console.log(name);
};
return o;
}
var person11 = Person7('kevin');
person11.sayName(); // kevin
person11.name = "daisy";
person11.sayName(); // kevin
console.log(person11.name); // daisy
log(1000, person11.__proto__.constructor.name) // Object
자세히 보기: 효과 보기
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.