>  기사  >  웹 프론트엔드  >  관계나 능력, 이 두 가지 기준이 모두 사용됩니다.

관계나 능력, 이 두 가지 기준이 모두 사용됩니다.

Barbara Streisand
Barbara Streisand원래의
2024-10-07 06:22:29746검색

Relationship or ability, both of these criteria are used

사회에서 사람의 능력과 가치를 평가할 때 '관계에 기초'하는 기준과 '능력에 기초'하는 두 가지 기준이 있는 경우가 많습니다. 두 표준 모두 서로 다른 문화, 산업, 개인적 가치관으로 구체화되어 있으며, 각각 지지자와 비방자가 있습니다.

프로그래밍 언어에는 데이터 구조를 함수에 연결하여 코드를 다양한 방식으로 구성하는 두 가지 종류의 표준이 있습니다. 이 기사에서는 이 두 가지 공통 표준의 적용 및 작동 원리에 대해 간략하게 설명합니다.

클래스 모델

Javascript 언어에서는 클래스를 정의하는 데 사용할 수 있는 class 키워드가 제공됩니다. 중요한 점은 클래스가 확장 가능하며 인스턴스에서 메서드가 호출될 때 프로토타입 체인 순서대로 메서드 정의를 조회한다는 것입니다. 예:


class Animal {
    move() { return 'move' }
}
class Monkey extends Animal {
    jump() { return 'jump' }
}
class Human extends Monkey {
    write() { return 'write' }
}


extends 키워드는 다른 클래스에서 확장되는 새로운 클래스를 정의하는 데 도움이 될 수 있습니다. 다음과 같이 프로토타입 체인을 얻을 수 있습니다:


let me = new Human()
let proto = me.__proto__
let r = []

while (proto !== null) {
    r.push(proto.constructor.name)
    proto = proto.__proto__
}


['인간', '원숭이', '동물', '객체']와 같은 r을 얻습니다. 메소드를 호출할 때 메소드 호출의 성공 여부는 프로토타입 체인에 해당 정의가 있는지 여부에 따라 달라집니다. 예를 들어 me.move()를 호출하면 Animal 클래스에 정의가 있고 호출이 성공합니다.

이것은 제가 "관계형" 모델이라고 부르고 싶은 클래스 모델입니다. 인스턴스 자체의 클래스나 상위 클래스, 조부모 클래스 등에 정의되어 있는 한 호출할 수 있습니다. 에.

역량 기반 모델

관계 기반 모델에 비해 역량 기반 모델은 훨씬 간단합니다. 인스턴스가 특정 특성을 만족하기만 하면 인스턴스 관계에 관계없이 해당 메서드가 인스턴스에 작용할 수 있습니다.


let me = {
    moveable: true,
    freezable: false
}

function move(x) { return x.moveable ? 'move' : undefined }
function freeze(x) { return x.freezable ? 'freeze' : undefined }


이 모델에서는 데이터와 방법이 서로 독립적입니다. 간결하고 직관적이라는 것이 장점이지만 메소드와 데이터의 독립성으로 인해 메소드 정의를 재정의하기 어렵다는 단점이 명백합니다.

요약

데이터 구조와 메소드를 연결하는 두 가지 방법을 소개한 후, 데이터의 클래스에 따라 같은 이름의 다른 기능을 가진 메소드를 구현해야 할 경우 관계형 클래스 모델을 사용하는 것이 좋다고 생각할 수 있습니다. . 일반적으로 방법이 상대적으로 고정되어 있고, 데이터가 변경 가능하며, 다른 데이터에 동일한 방법이 적용되는 경우 역량 기반 모델을 사용할 수 있습니다.

위 내용은 관계나 능력, 이 두 가지 기준이 모두 사용됩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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