ホームページ >ウェブフロントエンド >jsチュートリアル >JS によるオブジェクトの作成 (一般的なメソッド)_js オブジェクト指向

JS によるオブジェクトの作成 (一般的なメソッド)_js オブジェクト指向

WBOY
WBOYオリジナル
2016-05-16 18:58:59890ブラウズ

説明:
function O(user,pwd){ //コンストラクターを使用します
this.user=user;
this.pwd=pwd;
this.get=get;
これを返します;
}
function O2(user,pwd){ //ファクトリーを使用
var obj=new Object();
obj.user=ユーザー;
obj.pwd=pwd;
obj.get=get;
オブジェクトを返します;
}
function O3(){ //プロトタイプを使用
}
O3.prototype.user='abc';
O3.prototype.pwd='dis';
// O3.propotype.get='get';
//O3.prototype.get(){
//alert(this.pwd);
//}
function O4(user,pwd){
this.user=user;
this.pwd=pwd;
これを返します;
}
O4.prototype.get=function(){alert('123');}

//function get(){
//alert("このユーザー:" this.user);
// }
function test2(){
//var a=new O2('Us','Pw');ファクトリとコンストラクタを使用します
//var a=new O3(); //プロトタイプ
を使用//a.get();
var a=new O4('*U4','P4'); //混合
//a.user='ABC ではありません'; //新しいプロパティを設定
//alert(a.user);
a.get();
}
常用の MS 就这几种、可能性がありますその他の.碰へ再说吧....
题外话:昨天手欠、试图用alert(window.appName)到ff之ブラウザのバージョンを確認すると、出てきたのは Firefox ではなく Netscape でした。さらに Chrome を下回ると、再び Netscape が表示されます。baidu Netscape は Netscape 社から公開されています。この久しいjsは先祖の爾爾を承認しません。これ以降、jsはブレンダン・アイヒの手から出てきました、95年前のjsの時も、31年も経っていません。老いる我、都学不会のjsに到達、真の人比人的死人。 jsの当初設計時、一部の電子機器を使って撮影した写真、アップネット、ネットワーク、電気を自分自身で収集できるとは考えていませんでした。智能機械。真は造化弄人です!不是木有类么?没关系,人家不是设计了原型属性么~
js不是木有块级作用領域么?没关系,人家不是有作用領域链么~
js怎样实现成员变量私有化?さらに、
を使用して、この多くの基本概念を根本的に修正し、その方法を変更しています。理解された工厂モード開始:


复制代代码如下:
function createperson(name,age ,job){
var o = {};
o.name = 名前;
o.age = 年齢;
o.job = 仕事;
o.sayName = function(){
alert(this.name);
};
戻ります;
}
var Tanya = createperson("tanya","30","女性");
var ansel = createperson("ansel","30","male");
tanya.sayName();
ansel.sayName();


ここでは、空のオブジェクトとして指定され、その後、スタック プロパティが設定されます。その場合、そのプロパティに直接アクセスすることもできます。


复制代代码如下:
function createperson(name,age,job){
var o = {
name : 名前、
age : 年齢、
job : 仕事、
sayName : function(){
alert(this.name);
}
};
戻ります;
}
var Tanya = createperson("tanya","30","女性");
var ansel = createperson("ansel","30","male");
tanya.sayName();
ansel.sayName();


もう 1 つの方法は、this を使用せずに this を利用することです。this は現在の実行時のオブジェクトを示すため、この構造関数の作用領域を新しいオブジェクトに向け、現在の実行オブジェクトのプロパティとメソッドをすべて考慮します。新しいオブジェクト、この样对オブジェクトモード式は构造関数数モードと呼ばれます。 function 人(名前,年齢,仕事){
this.name = 名前;
this.age = 年齢;
this.job = ジョブ;
this.sayName = function(){ alert(this.name); }; } var Tanya = 新しい人("tanya","30","女性"); var ansel = 新しい人("ansel","30","男性"); tanya.sayName();
ansel.sayName();


この例では、tanya と ansel は両方とも人を指すコンストラクター プロパティを持っています。 🎜>复制代


代码如下:

関数 人(名前,年齢,仕事){
この.名前 = 名前;
この.ジョブ = ジョブ;
この.sayName = function(){
alert(this.name);
}
人("ターニャ","30","女性"); "30","male");
window.sayName();


両方の ansel が表示されることがわかりました。これは、new が存在しないためです。 used である場合、それは person のインスタンスではなく、関数を実行するだけです。グローバル スコープで関数を呼び出す場合、これは常に Global オブジェクトを指します。 Global オブジェクトはブラウザのウィンドウ オブジェクトです。
構築モードを使用して別のオブジェクトの SayName メソッドを呼び出すこともできます。



コードをコピーしてみましょう。 >
コードは次のとおりです。 function Person(name,age,job){ this.name = name; this.age = age; this.job = ジョブ; this.sayName = function(){
alert(this.name);
}
var olivia = {}; call(オリビア,"ターニャ","30","女性");
オリビア.sayName();
var philip = {}
person.apply(philip,["ansel" ,"30 ","male"]);
philip.sayName();


プロトタイプ モードでは、プロトタイプ チェーンを考慮する必要があります。分析後、sayName メソッドはインスタンス内で繰り返し定義されます。2 回ですが、同一のコピーを 2 つ作成する必要はありません。プロトタイプ メソッドを使用すると、tanya と ansel はsayName メソッドを共有できます。
プロトタイプ パターンは次のように記述されます:




コードをコピーします

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

関数 人 (名前,年齢,仕事){ this.name = 名前; this.job = 職業; 人。プロトタイプ.sayName= function( ){ alert(this.name); var Tanya = 新しい人 ("tanya","30","女性"); = new Person("ansel ","30","male"); tanya.sayName();

実際のアプリケーションでは、パターンは常に学習して適用できるわけではありません。メソッドを共有する必要がある場合はプロトタイプ モードを使用し、コピーを使用する必要がある場合は構築モードを使用します。これらを組み合わせてコンストラクター内のすべての情報をカプセル化し、オブジェクトを同時に使用できるようにコンストラクター内でプロトタイプを初期化することもできます。コンストラクターとプロトタイプの利点。




コードをコピー


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


function person(name,age,job) {
this.name = 名前;
this.job = ジョブ;
if (typeofsayName != "function" ){
person.prototype.sayName = function( ){
alert(this.name); } } var ターニャ = 新しい人("ターニャ","30","女性"); var ansel = new Person("ansel","30","male"); ansel.sayName = function () { alert("こんにちは、アンセル、なんてハンサムなんでしょう!");
}
tanya.sayName()
ansel.sayName();
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。