javascript_javascript スキルにおけるプロトタイプの継承に関する簡単な説明
ソース コードを参照してください:
function clone( o) {
var F = function(){};
F.prototype = o;
return new F();
var ExtObject = Ext.Object = {
chain: function (object) {
TemplateClass.prototype = object;
var result = new TemplateClass();
TemplateClass.prototype = null;
return result;
}
}
jquery で継承がどのように機能するかをもう一度見てみましょう。
return new jQuery.fn.init( selector, context, rootjQuery );
};
jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
-------------- -- ------
}
}
--------
jQuery.fn.init.prototype = jQuery .fn ;
jquery はより高度で、jQuery.fn.init を使用して実行できますが、考え方は同じです。
$.log(" Object.create 実装は最初のパラメーターのみを受け入れます。")
}
function F() {}
F.prototype = o;
return new F();
es5 の正式バージョンを確認する、互換性パッチを見つけました:
Object.create = function create(prototype,properties) {
var オブジェクト;
if (プロトタイプ === null) {
オブジェクト = { "__proto__": null };
} else {
if (プロトタイプ != "オブジェクト") {
throw new TypeError("typeofprototype[" (typeofprototype) "] != 'object'");
var Type = function () {}; prototype ;
object = new Type();
// IE には `Object.getPrototypeOf` の組み込み実装がありません
// `__proto__` もありませんが、これを手動で設定すると
// `Object.getPrototypeOf` が
で期待どおりに動作することを保証します。// `Object.create` を使用して作成されたオブジェクト
object.__proto__ =
}
if (properties !== void 0) {
Object.defineProperties(object,properties);
}
}
上記のコードは相対的に考慮されます包括的ですが、Object.defineProperties への追加パッチの導入が必要で、ソース コードは比較的大きくなります。
コードをコピー
コードは次のとおりです:
// ES5 15.2.3.6
// http://es5.github.com/#x15.2.3.6
// WebKit および IE8 標準モード用のパッチ
// hax
// 関連する問題: https://github.com/kriskowal/es5-shim/issues#issue/5
// IE8 リファレンス:
// http://msdn.microsoft.com/ en-us/library/dd282900.aspx
// http://msdn.microsoft.com/en-us/library/dd229916.aspx
// WebKit のバグ:
// https:// bugs.webkit.org/show_bug.cgi?id=36423
function dosDefinePropertyWork(object) {
try {
Object.defineProperty(object, "sentinel", {});
オブジェクトの「センチネル」を返します。
} catch (例外) {
// false を返します
}
}
// 指定されている場合、defineProperty が機能するかどうかを確認します。それ以外の場合、
// 部分的にシムします。
if (Object.defineProperty) {
var definePropertyWorksOnObject = dosDefinePropertyWork({});
var definePropertyWorksOnDom = ドキュメントの種類 == "未定義" ||
doesDefinePropertyWork(document.createElement("div"));
if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) {
vardefinePropertyFallback = Object.defineProperty;
}
}
if (!Object.defineProperty || definePropertyFallback) {
var ERR_NON_OBJECT_DESCRIPTOR = "プロパティの説明はオブジェクトである必要があります: ";
var ERR_NON_OBJECT_TARGET = "非オブジェクトで呼び出された Object.defineProperty: "
var ERR_ACCESSORS_NOT_SUPPORTED = "この JavaScript エンジンではゲッターとセッターを定義できません "
";
Object.defineProperty = function defineProperty(object, property, descriptor) {
if ((typeof object != "object" && typeof object != "function") || object === null) {
新しい TypeError(ERR_NON_OBJECT_TARGET オブジェクト) をスローします。
}
if ((記述子のタイプ != "オブジェクト" && 記述子のタイプ != "関数") || 記述子 === null) {
throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR 記述子);
}
// I8 の DOM 要素に対して実際のdefineProperty
// を使用するという勇敢な試みを行ってください。
if (definePropertyFallback) {
try {
return definePropertyFallback.call(Object, object, property, descriptor);
} catch (例外) {
// 実際のシムが機能しない場合は shim を試します
}
}
// データ プロパティの場合。
if (owns(descriptor, "value")) {
// "writable"、"enumerable"、または "configurable" の場合はサイレントに失敗します
// 要求されたがサポートされていません
/*
// 代替アプローチ:
if ( // これらの機能は実装できません。false は許可しますが、true は許可しません
!(owns(descriptor, "writable") ? descriptor.writable : true) ||
!(owns(descriptor, "enumerable") ? descriptor.enumerable : true) ||
!(owns(descriptor, "configurable") ? descriptor.configurable : true)
)
throw new RangeError(
「Object.defineProperty のこの実装は、"
"構成可能、列挙可能、または書き込み可能をサポートしていません。"
);
*/
if (supportsAccessors && (lookupGetter(object, property) ||
lookupSetter(object, property)))
{
// アクセサーは // `__proto__` は、継承された
// アクセサーにヒットしないようにするためのプロパティを定義する際に、安全に `__proto__` をオーバーライドできます。
var プロトタイプ = object.__proto__;
object.__proto__ = プロトタイプのオブジェクト;
// getter / setter がオブジェクト自体に定義されている可能性があるため、とにかくプロパティを削除します。
//
オブジェクト[プロパティ]を削除します。
オブジェクト[プロパティ] = 記述子.値;
// 元の `__proto__` を設定します。
object.__proto__ = プロトタイプ;
} else {
オブジェクト[プロパティ] = 記述子.値;
}
} else {
if (!supportsAccessors) {
throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);
}
// ここまで進めば、ゲッターとセッターを定義できるようになります。
if (owns(descriptor, "get")) {
defineGetter(object, property, descriptor.get);
}
if (owns(descriptor, "set")) {
defineSetter(object, property, descriptor.set);
}
}
オブジェクトを返します。
};
}
// ES5 15.2.3.7
// http://es5.github.com/#x15.2.3.7
if (!Object.defineProperties) {
オブジェクト。 defineProperties = function defineProperties(object,properties) {
for (プロパティの var プロパティ) {
if (owns(properties, property) && property != "__proto__") {
Object.defineProperty(object,プロパティ、プロパティ[プロパティ]);
}
}
オブジェクトを返します。
};
}
EcmaScript6 のクラス継承。
class module extends Base {
constructor() {
代制
代次:
if (!Object.create) {
Object.create = function create(o) {
var F = function(){};
F.プロトタイプ = o;
var result = new F();
F.prototype = null;
結果を返します。
}
}

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

Matter.jsは、JavaScriptで書かれた2D Rigid Body Physics Engineです。このライブラリは、ブラウザで2D物理学を簡単にシミュレートするのに役立ちます。剛体を作成し、質量、面積、密度などの物理的特性を割り当てる機能など、多くの機能を提供します。また、重力摩擦など、さまざまな種類の衝突や力をシミュレートすることもできます。 Matter.jsは、すべての主流ブラウザをサポートしています。さらに、タッチを検出し、応答性が高いため、モバイルデバイスに適しています。これらの機能はすべて、物理ベースの2Dゲームまたはシミュレーションを簡単に作成できるため、エンジンの使用方法を学ぶために時間をかける価値があります。このチュートリアルでは、このライブラリのインストールや使用法を含むこのライブラリの基本を取り上げ、

この記事では、JQueryとAjaxを使用して5秒ごとにDivのコンテンツを自動的に更新する方法を示しています。 この例は、RSSフィードからの最新のブログ投稿と、最後の更新タイムスタンプを取得して表示します。 読み込み画像はオプションです
