ホームページ > 記事 > ウェブフロントエンド > 人間関係または能力、これら両方の基準が使用されます
社会では、人の能力や価値を評価する際、「人間関係によるもの」と「能力によるもの」の2つの異なる基準が存在することがよくあります。どちらの基準も、異なる文化、業界、個人の価値観で具体化されており、それぞれに独自の支持者と批判者がいます。
プログラミング言語内には、異なる方法でコードを編成し、データ構造を関数にリンクする 2 種類の標準があります。この記事では、これら 2 つの共通標準の適用と動作原理について簡単に説明します。
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 を取得します: ['Human', 'Monkey', 'Animal', 'Object']。メソッドを呼び出すとき、メソッド呼び出しが成功するかどうかは、プロトタイプ チェーンに対応する定義があるかどうかによって決まります。たとえば、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 }
このモデルでは、データとメソッドは互いに独立しています。利点は、簡潔でわかりやすいことですが、欠点は明らかです。メソッドとデータが独立しているため、メソッド定義をオーバーライドするのが困難です。
データ構造とメソッドを接続する 2 つの方法を紹介した後、データのクラスに応じて同じ名前の異なる関数を持つメソッドを実装する必要がある場合は、リレーショナル クラス モデルを使用することが推奨されると考えることができます。 。通常、メソッドが比較的固定されており、データが変更可能であり、同じメソッドが異なるデータで機能する場合、コンピテンシーベースのモデルを使用できます。
以上が人間関係または能力、これら両方の基準が使用されますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。