ホームページ > ウェブフロントエンド > jsチュートリアル > Javascriptオブジェクトメンバー、共有メンバー変数experiment_javascriptスキル

Javascriptオブジェクトメンバー、共有メンバー変数experiment_javascriptスキル

WBOY
リリース: 2016-05-16 18:15:56
オリジナル
1052 人が閲覧しました

1) Javascript オブジェクト メンバーの実験:

コードをコピー コードは次のとおりです:

var f = function d () {
this.a = "a";/*この文を実行すると、f.a も d.a もありません。window.a があります*/
var b = "b";/*ローカル変数*/
};
var o = { ff: function () {
var a = "a"; /*ローカル変数*/
this.b = "b"; *この文は o.b*/
}
} の後に実行されます。
function Man(){
this.age = 30;
Man.prototype.sex = 1 ;
Man.prototype.name = function () {
};/*最初のブレークポイント*/
o.ff(); m = new Man(); /*2 番目のブレークポイント*/



最初のブレークポイントでのオブジェクト メンバーの存在:


2 番目のブレークポイントでのオブジェクト メンバーの存在:

一文: js 関数について: これは関数の外側の最も近いレベルのオブジェクトを指しますが、ネストされた関数の内部関数内の this はウィンドウ オブジェクトを指します。

一言で言えば: js の oo 機能: オブジェクトのメンバーを定義するためにこれを使用します。オブジェクトの使用には、クラスとオブジェクト インスタンス、および .prototype の違いがあります。定義は古典的な定義方法であり、クラスとオブジェクトのインスタンスが統合されています。

2) Javascript オブジェクトの共有メンバー変数の実験:



コードをコピー

コードは次のとおりです。 function Ghost(_name) { this.name = _name; this.age = 1000;
}
Ghost.prototype.setName = function (_name) {
this.name = _name;
}
function Man(_name){
this.age = 30;
this.ghost = new Ghost("インスタンス変数" _name); 🎜> };
Man.prototype.ManGhost = new Ghost("共有変数");
var a = new Man("a");
var amg = a.ManGhost.setName("a の共有変数を設定するだけです");
debugger; /*最初のブレークポイント*/
var ag = a.ghost; = b.ghost;
var bmg = b.ManGhost; /*2 番目のブレークポイント */




最初のブレークポイントまで実行します:




単純変数とオブジェクト変数の違い

.prototype で定義されたメンバーを使用します。メンバーが単純な変数の場合、各オブジェクト インスタンスには独自のコピーがあります。 (例: Man.prototype.noObejctVar)

.prototype で定義されたメンバーを使用します。メンバーがオブジェクト変数の場合、各オブジェクト インスタンスはオブジェクトの同じコピーを共有します。 (例: Man.prototype.ManGhost)

なぜこのような違いがあるのでしょうか? ManGhost 変数と noObjectVar 変数には違いはありません。どちらも .prototype を使用して定義されたメンバーです。つまり、それらのアクセス方法と使用方法が異なるだけです。 ManGhost 変数には新しいオブジェクトが格納され、noObjectVar 変数には値 (または特定の値への参照) が格納されます。つまり、ManGhost はオブジェクトへの参照を格納します。参照、および noObjectVar 変数 メモリ ストレージも、ある種の値参照である可能性がありますが、この参照を操作に使用することはできません。

別の視点から見る

noObjectVar 変数は文字列オブジェクトへの参照を保存します。

a.noObjectVar="新しい文字列 a";

これは、noObjectVar が元の文字列オブジェクト参照から新しい文字列オブジェクト参照を指すことを意味します (新しい文字列オブジェクトが元の文字列オブジェクトを上書きするとも言えます)

a.ManGhost=new Ghost("a");

b.ManGhost=new Ghost("b");

このように、a と b の間でオブジェクトを共有することは問題ありませんが、prototype.ManGhost を作成するときに新しいオブジェクトを定義するのは間違っています。このように

.prototype を使用してメンバー関数と共有変数を定義するのが正しい使用法です。

JavaScript を使用してクラスを正しく定義するには、以下を参照してください: [技術メモ] クラス仕様を定義するための JavaScript

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート