JavaScript-objektin rakentaja
- Edellinen sivu JS-objektin käsittely
- Seuraava sivu JS-objektiprototyyppi
实例
function Person(first, last, age, eye) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eye; }
On hyvä tapa nimittää konstruktiorutiinit isolla alkukirjaimella.
Objektityyppi (kaava) (luokka)
Edellisessä luvussa esitetyt esimerkit ovat rajallisia. Ne luovat vain yhden objektin.
Joskus meidän täytyy luoda useita saman "tyypin" objekteja:kaava" on käyttää
Tapa luoda tietyn "tyypin" monien objektien "objektin konstruktiorutiini。
Yllä olevassa esimerkissä,funktio Person() tämä on objektin konstruktiorutiini.
kautta new avainsanan kutsu konstruktiorutiinilla voi luoda samanlaista objektia:
var myFather = new Person("Bill", "Gates", 62, "blue"); var myMother = new Person("Steve", "Jobs", 56, "green");
this avainsanaksi
JavaScriptissä sitä kutsutaan this
joiden asiat ovat koodin "omistajia".
this
arvo, kun sitä käytetään objektissa, on itse objekti.
Konstruktorifunktiossa,this
Se ei ole arvoa. Se on uuden olion korvikkeena. Kun uusi olio luodaan, this:n arvo tulee olemaan tämä uusi olio.
请注意 this
它并不是变量。它是关键词。您无法改变 this 的值。
为对象添加属性
为已有的对象添加新属性很简单:
实例
myFather.nationality = "English";
新属性被添加到 myFather。不是 myMother,也不是任何其他 person 对象。
为对象添加方法
为已有的对象添加新方法很简单:
实例
myFather.name = function () { return this.firstName + " " + this.lastName; };
新方法被添加到 myFather。不是 myMother,也不是任何其他 person 对象。
为构造器添加属性
与向已有对象添加新属性不同,您无法为对象构造器添加新属性:
实例
Person.nationality = "English";
如需向构造器添加一个新属性,您必须添加到构造器函数:
实例
function Person(first, last, age, eyecolor) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eyecolor; this.nationality = "English"; }
这样对象属性就可以拥有默认值。
为构造器添加方法
您的构造器函数也可以定义方法:
实例
function Person(first, last, age, eyecolor) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eyecolor; this.name = function() {return this.firstName + " " + this.lastName;}; }
与向已有对象添加新方法不同,您无法为对象构造器添加新方法。
必须在构造器函数内部向一个对象添加方法:
实例
function Person(firstName, lastName, age, eyeColor) { this.firstName = firstName; this.lastName = lastName; this.age = age; this.eyeColor = eyeColor; this.changeName = function (name) { this.lastName = name; }; }
changeName() 函数将 name 赋值给 person 的 lastName 属性。
现在您可以试一试:
myMother.changeName("Jobs");
通过用 myMother
替代 this,JavaScript 可以获知目前处理的哪个 person。
内建 JavaScript 构造器
JavaScript 提供用于原始对象的构造器:
实例
var x1 = new Object(); // 一个新的 Object 对象 var x2 = new String(); // 一个新的 String 对象 var x3 = new Number(); // 一个新的 Number 对象 var x4 = new Boolean(); // 一个新的 Boolean 对象 var x5 = new Array(); // 一个新的 Array 对象 var x6 = new RegExp(); // 一个新的 RegExp 对象 var x7 = new Function(); // 一个新的 Function 对象 var x8 = new Date(); // 一个新的 Date 对象
Math()
对象不再此列。Math 是全局对象。new
关键词不可用于 Math。
您知道吗?
正如以上所见,JavaScript 提供原始数据类型字符串、数字和布尔的对象版本。但是并无理由创建复杂的对象。原始值快得多!
请使用对象字面量 {}
代替 new Object()
。
请使用字符串字面量 ""
代替 new String()
。
请使用数值字面量代替 Number()
。
请使用布尔字面量代替 new Boolean()
。
请使用数组字面量 []
代替 new Array()
。
请使用模式字面量代替 new RexExp()
。
请使用函数表达式 () {}
代替 new Function()
。
实例
var x1 = {}; // 新对象 var x2 = ""; // 新的原始字符串 var x3 = 0; // 新的原始数值 var x4 = false; // 新的原始逻辑值 var x5 = []; // Uusi taulukkoobjekti var x6 = /()/ // Uusi säännöllinen lausekeobjekti var x7 = function(){}; // Uusi funktioobjekti
字符串对象
Yleensä merkkijonot luodaan alkuperäisarvoiksi: var firstName = "Bill"
Mutta voit myös käyttää new
Avainsanalla luodaan merkkijonoobjekti: var firstName = new String("Bill")
Ole hyvä ja JS-merkkijonoTässä luvussa opit, miksi ei pitäisi luoda merkkijonoja objekteiksi.
数字对象
Yleensä luvut luodaan alkuperäisarvoiksi: var x = 456
Mutta voit myös käyttää new
Avainsanalla luodaan lukuobjekti: var x = new Number(456)
Ole hyvä ja JS-lukuTässä luvussa opit, miksi ei pitäisi luoda lukuja objekteiksi.
布尔对象
Yleensä loogiset arvot luodaan alkuperäisarvoiksi: var x = false
Mutta voit myös käyttää new
Avainsanalla luodaan looginen objekti: var x = new Boolean(false)
Ole hyvä ja JS-looginenTässä luvussa opit, miksi ei pitäisi luoda loogisia arvoja objekteiksi.
- Edellinen sivu JS-objektin käsittely
- Seuraava sivu JS-objektiprototyyppi