ホームページ >ウェブフロントエンド >jsチュートリアル >面接の質問から学ぶJavaScriptオブジェクト指向(オブジェクト作成)_jsオブジェクト指向

面接の質問から学ぶJavaScriptオブジェクト指向(オブジェクト作成)_jsオブジェクト指向

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

タイトル:

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

try{
var me = Man( { fullname: "小红" });
var she = new Man({ fullname: "小红" });
console.group();名前は :" me.attr("fullname") "n私の性別は:" me.attr("gender"));
console.groupEnd();
/*------[実行]結果]------
私の名前は: Xiaohong
私の性別は: <ユーザーが入力しませんでした>
-------------- --- -*/
me.attr("フルネーム", "シャオミン");
me.attr("性別", "男性"); me.gender = "ニューハーフ";
she.attr("性別", "女性");
console.group();
console.info("私の名前は:" "フルネーム") "n私の性別は:" me.attr("gender"));
console.groupEnd();
/*------[実行結果] ------
私の名前は: Xiao Ming
私の性別は: 男性
------*/
console.group(); 🎜>console.info("私の名前は:" she.attr("フルネーム") "n私の性別は" she.attr("性別")); ------【実行結果】------
私の名前は:Xiaohong
私の性別は:女性
-- ------------- ---*/
me.attr({
"words-limit": 3,
"words-emote": "smile"
});私はビデオを見るのが好きです。");
me.words("私たちのオフィスはとても美しいです。");
me.words("ビデオの中の美しい女性はたくさんあります! ");
私。 Words(「いつもYouku見てます! ");
console.group();
console.log(me.say());
/*------[実行結果]------
シャオミンさんは微笑みながら、「ビデオを見るのが好きです。私たちのオフィスはとても美しいです。動画にはたくさんの美女が登場します! "
------------------*/
me.attr({
"単語制限": 2,
"単語-感情表現": "シャウト"
});
console.log(me.say());
console.groupEnd();
/*------[実行結果]- -----
シャオミンはこう叫びました。「ビデオを見るのが好きです。私たちのオフィスはとても美しいです。 "
------------------*/
}catch(e){
console.error("実行エラー、エラー メッセージ: " e) ;
}


知識ポイント:
(1) JS オブジェクト指向の基本: ECMA-262 ではオブジェクトを次のように定義しています。「順序付けされていない属性のコレクション。その属性には基本的な値、オブジェクト、または関数を含めることができます。」
(2) JS でオブジェクトを作成する方法:
(a) ファクトリ パターン: 関数を使用して、特定のインターフェイスでオブジェクトを作成する詳細をカプセル化します。
Function createperson(name, age, job){
var o = new Object();
o.age = 年齢;
o.job = job; ;
o.sayName = function(){
}; 9 , "ソフトウェアエンジニア")
var person2 = createperson("Greg", 27, "Doctor");ファクトリ パターンは、複数の見慣れたオブジェクトを作成する問題を解決しますが、オブジェクト認識の問題 (つまり、オブジェクトの種類を知る方法) は解決しません。
(b) コンストラクターパターン: ECMAScript のコンストラクターを使用して、特定のタイプのオブジェクトを作成できます。カスタム コンストラクターを作成して、カスタム オブジェクト タイプのプロパティとメソッドを定義できます。
関数 person(名前, 年齢, 職業){
this.name = 名前;
this.job = job;
this.sayName = function() {
メソッドは次のようにする必要があります各インスタンスで再作成されます。忘れないでください。ECMAScript の関数はオブジェクトであるため、関数
を定義するたびに、オブジェクトがインスタンス化されます。
(c) プロトタイプパターン: 作成するすべての関数には、オブジェクトを指すポインターであるプロトタイプ属性があり、このオブジェクトの目的は、特定の型で表現できるすべてのオブジェクトを含めることです
インスタンスによって共有されるプロパティとメソッド。プロトタイプ オブジェクトを使用する利点は、すべてのオブジェクトがそれに含まれるプロパティとメソッドを共有できることです。 person();
person1.sayName(); //「ニコラス」
var person2 = new Person();
person2.sayName(); //「ニコラス」
alert( sayName == person2.sayName); //true
欠点: プロトタイプ内のすべてのプロパティは多くのインスタンスで共有されます。この種の共有は関数に非常に適しています。ただし、参照型の値を持つプロパティの場合、問題はより顕著になります。
(d) コンストラクター パターンとプロトタイプ パターンの組み合わせ: カスタム タイプを作成する最も一般的な方法は、コンストラクター パターンとプロトタイプ パターンを組み合わせて使用​​することです。コンストラクター パターンはインスタンス プロパティの定義に使用され、プロトタイプ パターンはメソッドと共有プロパティの定義に使用されます。
関数 person(name, age, job){
this.name = 名前;
this.job = job;
this.friends = [" ", "裁判所"];
}
person.prototype = {
constructor: person,
sayName: function () {
alert(this.name);
}
};
var person1 = new person(“Nicholas”, 29, “Software Engineer”);
var person2 = new Person(“Greg”, 27, “Doctor”); friends.push(“ヴァン”);
アラート(person1.friends); //”シェルビー,コート,ヴァン”
アラート(パーソン2.フレンズ); //”シェルビー,コート”
アラート( person1.friends === person2.friends); //false
alert(person1.sayName === person2.sayName) //true
答え:




コードをコピー


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












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