사회에서 사람의 능력과 가치를 평가할 때 '관계에 기초'하는 기준과 '능력에 기초'하는 두 가지 기준이 있는 경우가 많다. 두 표준 모두 서로 다른 문화, 산업, 개인적 가치관으로 구체화되어 있으며 각각 지지자와 비방자가 있습니다.
프로그래밍 언어에는 데이터 구조를 함수에 연결하여 코드를 다양한 방식으로 구성하는 두 가지 종류의 표준이 있습니다. 이 기사에서는 이 두 가지 공통 표준의 적용 및 작동 원리에 대해 간략하게 설명합니다.
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 }
이 모델에서는 데이터와 방법이 서로 독립적입니다. 간결하고 직관적이라는 장점이 있지만 메소드와 데이터의 독립성으로 인해 메소드 정의를 재정의하기 어렵다는 단점이 명백합니다.
데이터 구조와 메소드를 연결하는 두 가지 방법을 소개한 후, 데이터의 클래스에 따라 같은 이름의 서로 다른 기능을 가진 메소드를 구현해야 할 경우 관계형 클래스 모델을 사용하는 것이 좋다고 생각할 수 있습니다. . 일반적으로 방법이 상대적으로 고정되어 있고, 데이터가 변경 가능하며, 다른 데이터에 동일한 방법이 적용되는 경우 역량 기반 모델을 사용할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3