JavaScriptはノートの簡単な分析のいくつかのオブジェクトを作成する方法を学びます.
// Object
var person = new Object();
person.name = "Sibarone";
person.age = "19";
//
var person = {
name: "Sibarone",
age: 19;
};
, , , , , :
function createPerson (name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
return o;
}
var person = createPerson ("ShiJianwen", 19, "Frontend Engineer");
, , , , , constructor , 。
function Person (name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.alertName = function () {
alert(this.name);
};
}
var person1 = new Person("ShiJianwen", 19, "Frontend Engineer");
var person2 = new Person("Sibarone", 19, "Frontend Engineer");
, , constructor Person, instanceof
で の を する も、 えば
person instanceof Object; //true
person instanceof Person; //true
しかし、 も ではありません.オブジェクト の を します. のコードのように. alertName
のように、 しいオブジェクトの に しいオブジェクトを します. alertName
は、JavaScriptでは が として われますので、 オブジェクトごとに しいalertName
オブジェクトは、 のコードで できます.
console.log(person1.alertName == person2.alertName); //false
した は オーバーヘッドを させ、この を するためにプロトタイプモードが した.
プロトタイプ JavaScriptにおいて された には、オブジェクトを すプロトタイプの があります.この は、すべてのインスタンスによって される と を みます.また、この によって されたすべてのインスタンスの オブジェクトです.プロトタイプモードを して されたオブジェクトは、オブジェクトインスタンスの を プロトタイプオブジェクトに し、これらの をすべてのインスタンスに させることができる.このように
function Person () {
//
}
Person.prototype.name = "ShiJianwen";
Person.prototype.age = 19;
Person.prototype.job = "Frontend Engineer";
var person = new Person() //
は の を する 、 の の で のオブジェクトを き えることができます.このように
function Person () {
}
Person.prototype = {
name: "ShiJianwen",
age: 19,
job: "Frontend Engineer"
};
, , , , 。 constructor
は、このプロトタイプオブジェクトに するコンストラクターを します. のPerson.prototypeオブジェクトのように、 はデフォルトです. constructor
はPersonコンストラクタを しますが、 は い の で のオブジェクトを します. constructor
が されると、この で されたプロトタイプオブジェクトとコンストラクタとの の がなくなります.この を するためには、プロトタイプオブジェクトを する に で する があります. constructor
、このように
function Person () {
}
Person.prototype = {
constructor: Person,
name: "ShiJianwen",
age: 19,
job: "Frontend Engineer"
};
。 , ? , , , , , , , , 。 :
function Person () {
}
Person.prototype = {
constructor: Person,
name: "ShiJianwen",
age: 19,
job: "Frontend Engineer",
arr: [1,2,3,4,5]
}
//
var person1 = new Person();
var person2 = new Person();
console.log(person1.arr); // [1,2,3,4,5]
console.log(person2.arr); // [1,2,3,4,5]
person1.name = "Sibarone"; //
person1.arr[0] = 5; //
console.log(person1.name); // Sibarone,
console.log(person2.name); // ShiJianwen,
console.log(person1.arr); // [5,2,3,4,5]
console.log(person2.arr); // [5,2,3,4,5]
, (arr), , , , , 。
, , , , , , , 。 :
function Person (name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.arr = [1,2,3,4,5];
}
Person.prototype = {
constructor: Person,
alertName: function () {
alert(this.name);
}
};
var person1 = new Person();
var person2 = new Person();
person1.arr[0] = 5;
console.log(person1.arr);// [5,2,3,4,5]
console.log(person2.arr);// [1,2,3,4,5]
。 , , 。 :
function Person (name, age, job) {
this.name = name;
this.age = age;
this.job = job;
if(typeof this.alertName != "function") {
Person.prototype.alertName = function () {
alert(this.name);
}
}
}
。 , , , :
function Person (name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.alertName = function () {
alert(this.name);
};
return o;
}
var person = new Person();
, , 。 , , Array , :
function specialArr () {
var values = new Array();
values.push.apply(values,arguments);
values.pipedString = function () {
return this.join("|");
};
return values;
}
var arr = new specialArr(1,2,3);
console.log(arr.pipedString()); // [1|2|3]
, pipedString
として、「|」で された を することができます. にArayコンストラクタ ではArayコンストラクタの が されていないので、Arayコンストラクタを ってこの な を することができませんが、 コンストラクターモードを ってこの を することができます. のコンストラクタに を えずにこのコンストラクタを できるからです.しかし、それを するには、 のモデルと じで、オブジェクトのタイプを することができません.これを って したオブジェクトのインスタンスは、このアーキテクチャ とは がないので、 のモードでオブジェクトを することができます.このようなモードでの は に されません. モードの に、 なオブジェクトという が されています. なオブジェクトとは、 がないこと、および がthisキーワードのオブジェクトにアクセスしないことをいいます.このようなオブジェクトは、データの を し、 のアプリケーションによって されることを ぐことができます. は の りです.
function Person (name, age, job) {
var o = new Object();
o.alertName = function () {
alert(name);
};
return o;
}
var person = Person("ShiJianwen", 19, "Frontend Engineer");
person.alertName();// ShiJianwen
のコードから れば、 モードは モードと ていますが、 いは、 モードはthisを していません.また、 の においてもnewオペレータを していません.このモードで されたオブジェクトの では、そのalertName に もname にアクセスできません.このセキュリティはこのモードの の です.しかし、 に したいのは、 モードは モードと じで、 したオブジェクトはいずれもそのオブジェクトタイプを できないことである. これらの は じです. についてはよく からないかもしれません.まだ っている もいますので、 と チェーンに する は のブログに いています.ご ください.