ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript学習記(9) jsオブジェクト設計パターン_基礎知識

JavaScript学習記(9) jsオブジェクト設計パターン_基礎知識

WBOY
WBOYオリジナル
2016-05-16 17:52:25862ブラウズ

1. オブジェクトを作成します

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

var person = 新しいオブジェクト ();
人.年齢 = 30;
人.sayName = 関数 () >alert(this.name);

person.sayName();


欠点: オブジェクトを識別できない




コードをコピー
コードは次のとおりです。 function createperson(name,age ,job) { var o = new Object();
o.age = 年齢;
o.sayName = 関数() {
alert (this.name);
return o;

var person1 ("A Liang",30,"Teacher") ;
var person2 = createperson("Junjun",24,"失業者");

person1.sayName(); //"A Liang"
person2.sayName(); Junjun"


3. コンストラクター パターン
欠点: カプセル化の欠如





コードをコピー


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

function person(name,age,job) { this.name = name; this.age = age; job = ジョブ; this.sayName =sayName; function SayName() { alert(this.name);
var person1 = 新しい人("A 梁",30 ,"先生");
var person2 = new Person("Junjun",24,"失業者");
person1.sayName(); ;


4. プロトタイプ モード
欠点: すべてのプロパティはインスタンスによって共有されます





コードをコピーします>
コードは次のとおりです。


function Person() {
}

person.prototype.name = "ALiang"; .age = 30;
人物.prototype.job = "教師";
alert(this.name); 🎜>hasOwnProperty() メソッドは特定のプロパティを検出します。インスタンス属性である場合は true を返します。



コードをコピー


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


function hasPrototypeProperty(object,name) {
return !object.hasOwnProperty(name) && (name in object)
}
//使用法
var person = new Person();
alert(hasPrototypeProperty(person,"name")); //true
person.name = "Grey"; prototype
alert(hasPrototypeProperty(person,"name")); //false


isPrototypeOf () メソッドは、指定されたオブジェクト object1 が別のオブジェクトのプロトタイプ チェーンに存在するかどうかを判断するために使用されます。 object2 である場合は true を返し、そうでない場合は false を返します。
形式は次のとおりです:
object1.isPrototypeOf(object2); object1 はオブジェクトのインスタンスであり、object2 はそのプロトタイプ チェーンがチェックされる別のオブジェクトです。 プロトタイプ チェーンを使用すると、同じオブジェクト タイプの異なるインスタンス間で機能を共有できます。 object2 のプロトタイプ チェーンに object1 が含まれている場合、isPrototypeOf メソッドは true を返します。 object2 がオブジェクトではない場合、または object1 が object2 のプロトタイプ チェーンに現れない場合、isPrototypeOf メソッドは false を返します。



コードをコピー


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


//リテラル​​ オーバーライド プロトタイプ オブジェクト
function Person(){
}

person.prototype = {
コンストラクター : 人物、
名前 : "ALiang"、
年齢 : 30、
仕事: "Teacher",
sayName : function() {
alert(this.name);
}

コードをコピーします


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

関数 人(名前,年齢,仕事) {
この.名前 = 名前;
この.年齢 = 年齢;
この.仕事 = 職業; ["xuyun","wuxueming"];
}
person.prototype = {
constructor : person,
sayName : function() {
alert(this.name); >}
};

var person1 = 新しい人("ALiang",30,"教師");
var person2 = 新しい人("ZuNan",26,"教師");
person1.friends.push("JunJun");
alert(person1.friends) //"xuyun","wuxueming","JunJun"
alert(person2.friends); xuyun","wuxueming"


6. 動的プロトタイプ モード



function person(name,age,job) {
this.name = name;
this.job = job; 🎜 >
if (typeof this.sayName != "function"){ //ここでのsayNameは、初期化後に存在する任意のメソッドまたはプロパティにすることができます
person.prototype.sayName = function() { //使用できませんリテラル 定量形式
alert(this.name);
}


7. 安全なコンストラクター パターン
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。