>웹 프론트엔드 >JS 튜토리얼 >Javascript 객체 지향 기사 (1)

Javascript 객체 지향 기사 (1)

黄舟
黄舟원래의
2017-02-07 14:30:57924검색

1 표현식의 개념

광범위한 개념: 반환된 모든 코드 블록은 표현식이 될 수 있습니다. 예:

var a=0;var a, b;
a = 0;这个表达式的返回值为0;
b = a;这个表达式的返回值为a;

할당 표현식의 반환 값은 오른쪽에 =입니다.


2 객체 지향 개념:

프로그래밍 아이디어. 핵심: 문제를 해결할 때 먼저 문제 해결에 도움이 되는 객체를 찾으세요.

장점:

ID: 스케줄러,

높은 코드 유연성,

높은 유지 관리성,

높은 확장성,


단점:

코드가 복잡해질 수 있습니다

가독성이 상대적으로 낮습니다


3 프로세스 지향:

ID: Executor

순서: 일반적인 상황에서는 중단되지 않으며 위에서부터 다음으로 단계별로 실행됩니다.


Javascript 언어의 4가지 특징:

약한 유형

멀티 패러다임

객체 기반 언어: js에서는 모든 것이 객체입니다

프로토타입 기반 언어


5 프로토타입의 개념

소위 프로토타입은 함수의 프로토타입을 참조하는 객체 속성

함수가 선언된 한 프로토타입은 존재한다

function foo(){};
foo.prototype['name']='ksir';
var f = new foo();
console.log(f.constructor ===foo.prototype.constructor);

이 함수로 생성된 모든 객체가 이 프로토타입을 공유하면, 즉 위에서 생성된 프로토타입은 모든 객체가 직접적으로 프로토타입의 모든 멤버(속성 및 메서드)에 액세스합니다.
(객체의 동적 특성은 . 또는 []를 사용하여 객체를 동적으로 생성할 수 있다는 것입니다.) 6 프로토타입의 본질

프로토타입의 본질은 객체

function Person(name,age,gender){
    this.name = name;
    this.age = age;
    this.gender = gender;
    this.talk = function(){
        console.log('hello');
     }
 }
 var kangfeng = new Person('小强',21,'男');
 var xiaoming = new Person('小明',20,'女');
 var xiaohong = new Person('小红','19','女');
 kangfeng.talk();
 xiaoming.talk();
 xiaohong.talk();
 //思考:这三个儿女的talk方法是否一样?
 console.log(xiaoming.talk === kangfeng.talk);
 console.log(xiaohong.talk === xiaohong.talk):
 //这三个对象的方法是不一样,相互独立的
 Person.prototype.addfu(){
    console.log('给原型添加一个函数');
}

생성자에도 동일한 로직 코드가 존재하며, 이후 객체 생성 시 함수가 복사되는 코드 로직 생성자에서 메소드를 추출하여 공개 장소에 배치하는 것입니다. 이 공개 장소는 생성자가 생성한 객체에 의해 액세스될 수 있습니다. 생성자의 모든 객체는 생성자의 프로토타입을 공유할 수 있습니다.

장점: 유사한 객체의 데이터 공유 실현

프로토타입을 얻는 7가지 방법

기능별:

<fnName>.prototype;

객체별:

object.__proto__;
//两个下划线

객체의 8개 구성 요소

객체 자체, 프로토타입

모든 객체에는 __proto__ 속성이 있습니다. 즉, 모든 객체에는 객체 유형이 있습니다. 프로토타입

Math.__proto__===object.prototype;

는 생성자의 이름입니다.


9 프로토타입 속성 및 프로토타입 객체

프로토타입 속성: 함수의 관점에서 프로토타입은 함수의 프로토타입 속성이라고 할 수 있습니다

프로토타입 객체: 객체의 관점에서 프로토타입은 객체의 프로토타입 객체라고 할 수 있습니다

10 __proto__ 이중 밑줄 표준


__proto__ 이 이중 밑줄 표준은 w3c 표준이 아니며 이러한 속성은 비표준 속성입니다.

호환성 문제가 있습니다. 이중 밑줄로 프로토타입 속성을 얻을 수 없으면

function getPrototype(obj){
    //判断浏览器是否兼容__proto__属性
    //return !!obj.__proto__? obj.__proto__:obj.constructor.prototype;
    if(obj.__proto__){
    //支持
        return obj.__proto__;
    }else{
        //获取该对象的构造函数
        //在通过此函数的prototype属性获取其原型对象
        return obj.constructor.prototype;
    }
}
function A(){};
var a = A();
console.log(getPrototype(a).constructor);
//如果我们的函数中有if else return结构,我们可以用3元运算符来优化.

함수를 통해 가져와야 합니다. 11 표준 생성자 작성 방법 // 어떤 속성을 저장해야 할까요? 생성자 내부에서 어떤 속성을 추출하여 프로토타입에 배치해야 하는지


function B(name){};
B.prototype.name = &#39;tom&#39;;
var tom = new B;console.log(tom.name);
var jim = new jim;console.log(jim.name);
//结果都是tom
//所以和具体某个对象息息相关的称为私有属性,这写属性都必须写在构造函数内,那些共享的属性(每个对象都具有的属性,不会随对象变化而变化,
比如说一些方法(对象的行为)--公有属性)就可以定义在原型属性中.
//一般情况下,构造函数的方法放原型上
//不提倡在js原生对象上进行扩展成员
//坏处,会导致原生对象过于庞大,累赘,影响性能

12 Notes



생성자에 메소드 추가 일반적으로 프로토타입에 추가됩니다. 편의상 메소드는 일반적으로 객체 형태로 1841fa06a94dcb2b1cc7533e1e2ff8c9.prototype{}에 추가됩니다. 동시에 생성자: 생성자 이름을 추가하는 것을 잊지 마세요. 키-값 쌍의 형태.


13가지 프로토타입의 특징

역동성:

멤버를 프로토타입으로 확장하면 생성된 객체가 직접 반영됩니다.

프로토타입 객체를 교체하면 생성된 객체가 반영되지 않고 나중에 생성되는 객체에 직접적인 영향을 미칩니다

고유성

동일한 함수로 생성된 모든 객체 객체, 동일한 프로토타입 객체를 공유합니다

불변성:

객체는 프로토타입 객체의 멤버를 변경할 수 없습니다.

상속:

모든 객체는 프로토타입 객체에서 상속됩니다.

위 내용은 자바스크립트 객체지향 기사(1)의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

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