>웹 프론트엔드 >JS 튜토리얼 >면접 질문으로 자바스크립트 객체지향 배우기(객체생성)_js 객체지향

면접 질문으로 자바스크립트 객체지향 배우기(객체생성)_js 객체지향

WBOY
WBOY원래의
2016-05-16 17:54:461422검색

제목:

코드 복사 코드는 다음과 같습니다.

try{
var me = Man( { fullname: "소红" });
var she = new Man({ fullname: "소红" })
console.group()
console.info("내 이름은:" me.attr("fullname") "n내 성별은:" me.attr("gender"));
console.groupEnd();
/*------[실행 결과]------
제 이름은 샤오홍입니다
제 성별은 <사용자가 입력하지 않았습니다>
--------------- --- -*/
me.attr("fullname", "Xiao Ming");
me.attr("gender", "male")
me.fullname = "waste"
me.gender = "shemale";
she.attr("gender", "female");
console.group()
console.info("내 이름은:" me.attr( "fullname") "n내 성별은:" me.attr("gender"));
console.groupEnd()
/*------[실행 결과] ------
내 이름은: Xiao Ming
내 성별: 남자
------*/
console.group()
console.info("내 이름은:" she.attr("fullname") "n내 성별은:" she.attr("gender"))
console .groupEnd()
/* ------[실행 결과]------
내 이름은 샤오홍
성별은 여
-- ------------- ---*/
me.attr({
"words-limit": 3,
"words-emote": "smile"
})
me.words(" 저는 영상 보는 것을 좋아합니다.");
me.words("저희 사무실은 정말 아름답습니다.");
me.words("영상에 나오는 미녀들이 참 많아요!");
me. word("저는 주로 Youku를 시청합니다! ");
console.group();
console.log(me.say());
/*------[실행 결과]------
샤오밍은 "저는 영상 보는 걸 좋아한다. 우리 사무실이 너무 예뻐요. 영상에 미인들이 너무 많아요! "
------*/
me.attr({
"words-limit": 2,
"words-emote ": "외치다"
});
console.log(me.say());
console.groupEnd();
/*------[실행 결과]- -----
샤오밍은 "저는 영상 보는 걸 좋아해요. 우리 사무실이 너무 예뻐요. "
------*/
}catch(e){
console.error("실행 오류, 오류 메시지: " e) ;
}

지식 포인트:
(1) JS 객체 지향 기본 사항: ECMA-262는 객체를 다음과 같이 정의합니다. "속성이 기본 값, 객체 또는 기능을 포함할 수 있는 순서가 지정되지 않은 속성의 모음입니다."
(2) JS에서 객체를 생성하는 방법:
(a) 팩토리 패턴: 함수를 사용하여 특정 인터페이스로 객체 생성의 세부 사항을 캡슐화합니다.
함수 createPerson(이름, 나이, 직업){
var o = new Object();
o.name = 이름
o.age = 나이
o.job; ;
     o.sayName = function(){
            };   9 , "소프트웨어 엔지니어")
var person2 = createPerson("Greg", 27, "Doctor"); 🎜> 단점: 하지만 팩토리 패턴은 여러 개의 친숙한 개체를 만드는 문제를 해결하지만 개체 인식 문제(즉, 개체의 유형을 아는 방법)는 해결하지 않습니다.
  (b) 생성자 패턴: ECMAScript의 생성자를 사용하여 특정 유형의 객체를 생성할 수 있습니다. 사용자 정의 생성자를 생성하여 사용자 정의 개체 유형의 속성과 메서드를 정의할 수 있습니다.
함수 사람(이름, 나이, 직업){
this.name = 이름;
this.age = 나이
this.job = job; {
                                                            in new Person(“Nicholas”, 29, “Software Engineer”); "Greg", 27, "Doctor")
단점: 생성자를 사용할 때의 주요 문제점은 각 인스턴스에서 다시 생성됩니다. 잊지 마세요. ECMAScript의 함수는 객체이므로 함수를 정의할 때마다
  객체를 인스턴스화합니다.
 (c) 프로토타입 패턴: 우리가 만드는 모든 함수에는 객체를 가리키는 포인터인 프로토타입 속성이 있으며, 이 객체의 목적은 특정 유형으로 표현할 수 있는 모든 객체를 포함하는 것입니다.
인스턴스가 공유하는 속성 및 메서드. 프로토타입 객체를 사용하면 모든 객체가 포함된 속성과 메서드를 공유할 수 있다는 것입니다.
function Person(){
= 29>  Person.prototype.job = “Software Engineer”; Person();
  person1.sayName(); //"니콜라스"
 var person2 = new Person()
  person2.sayName(); //"니콜라스"
 alert( person1. sayName == person2.sayName); //true
단점: 프로토타입의 모든 속성은 여러 인스턴스에서 공유됩니다. 이러한 종류의 공유는 기능에 매우 적합합니다. 그러나 참조 유형 값이 있는 속성의 경우 문제가 더욱 두드러집니다.
 (d) 생성자 패턴과 프로토타입 패턴의 결합: 사용자 정의 유형을 만드는 가장 일반적인 방법은 생성자 패턴과 프로토타입 패턴의 결합을 사용하는 것입니다. 생성자 패턴은 인스턴스 속성을 정의하는 데 사용되며 프로토타입 패턴은 메서드 및 공유 속성을 정의하는 데 사용됩니다.
함수 사람(이름, 나이, 직업){
this.name = 이름;
this.age = 나이
this.job =
this.friends; ", "법원"];
   }
  Person.prototype = {
   constructor: Person,
   sayName: function () {
    alert(this.name)
    }
  };
  var person1 = new Person(“니콜라스”, 29, “소프트웨어 엔지니어”)
  var person2 = new Person(“Greg”, 27, “Doctor”); friends.push(“밴”);
Alert(person1.friends); //”Shelby,Court,Van”
Alert(person2.friends); //”Shelby,Court”
경고( person1.friends === person2.friends); //false
 alert(person1.sayName === person2.sayName); //true
답변:




코드 복사


코드는 다음과 같습니다.



<머리>

<제목>

<본문>




성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.