際際滷

際際滷Share a Scribd company logo
JavaScript OOP. How is it possible?
Table of contents 
Introduction 
1. JavaScript data types 
1.1. String 
1.2. Number 
1.3. Boolean 
1.4. Object 
1.5. Array 
1.6. null 
1.7. undefined 
1.8. 亠仂弍舒亰仂于舒仆亳亠 亳仗仂于
Table of contents 
2. OOP in JavaScript 
2.1. Object 
2.1.1. 弌于仂亶于舒 仂弍亠从仂于 
2.1.2. 亠亠 亳 亠亠 
2.1.3. 亠仂亟 仂弍亠从舒 
2.1.4. 丼仂 舒从仂亠 this? 舒亞亳 于 亟亠亶于亳亳 
2.1.5. 亳亠舒仍仆亶 亳仆舒从亳 仂仗亠亟亠仍亠仆亳 仂弍亠从舒 
2.1.6. 舒仍亠亟仂于舒仆亳亠 仂弍亠从仂于 
2.2. Class 
2.2.1. 仍舒. 舒仍亠亟仂于舒仆亳亠 
2.2.2. 仍舒 亳 仗仂仂亳仗. 舒仍亠亟仂于舒仆亳亠
Introduction 
亰仆舒舒仍仆仂 JavaScript 仗仂亰亳亳仂仆亳亠 从舒从 仂弍亠从仆仂- 
仂亳亠仆亳仂于舒仆仆亶 磶从. 亅仂 于亠亢亟亠仆亳亠 于亰于舒亠 仗仂 亠亟亳 
舒亰舒弍仂亳从仂于. 仆仂于仆亠 从仂仆舒亞仄亠仆: 
 亟亠 从仍舒? 
 亟亠 仆舒仍亠亟仂于舒仆亳亠? 
  于仂仂弍亠 WTF?
仆亠仆亠 JavaScript (ECMAScript) 于亞仍磲亳 从舒从 Java, 仆仂 舒从亳亠从亳 仂 
仂于亠亠仆仆仂 亟亞仂亶 磶从, 仗仂仂亳仗仂仄 从仂仂仂亞仂 磦仍磳 磶从 Self 
(http://selflanguage.org/). 亅仂 仂弍仂亠仍于仂 亟亠仍舒亠 磶从 仂亠仆 
仗仂仄 亳 舒于仆亳亠仍仆仂 仄仂仆仄 弍仍舒亞仂亟舒 于仂亳仄 仂仂弍亠仆仆仂礆. 
亟仆舒 亳亰 舒从亳 仂仂弍亠仆仆仂亠亶  仂 亠舒仍亳亰舒亳 仗仂仂亳仗仆仂亞仂 
仆舒仍亠亟仂于舒仆亳. 亅仂 仗仂仂亶 从仂仆亠仗 磦仍磳 亞亳弍从亳仄 亳 仄仂仆仄. 仆 
仗仂亰于仂仍磳 亟亠仍舒 仆舒仍亠亟仂于舒仆亳亠 亳 仗仂于亠亟亠仆亳亠 仆仂礆亳 仗亠于仂亞仂 
从仍舒舒, 舒从亢亠 从舒从 亳 仆从亳亳 磦仍ム 仂弍亠从舒仄亳 仗亠于仂亞仂 从仍舒舒 于 
仆从亳仂仆舒仍仆 磶从舒 (于从仍ム舒 JavaScript).
1. JavaScript data types 
 JavaScript 亠 亳 仂仆仂于仆 亳仗舒 亟舒仆仆, 亟于舒 仂舒于仆 亳仗舒 
亟舒仆仆 亳 亟于舒 仗亠亳舒仍仆 亳仗舒 亟舒仆仆. 仂亞仂 7 亳仗仂于 亟舒仆仆. 
仂仆仂?  仂仆仂! 
仆仂于仆亠 亳仗 亟舒仆仆 (弍舒亰仂于亠): 
 String 
 Number 
 Boolean
弌仂舒于仆亠 亳仗 亟舒仆仆 (仍仂仆亠): 
 Object 
 Array 
弌仗亠亳舒仍仆亠 亳仗 亟舒仆仆: 
 null 
 Undefined 
 亞亟亠 亢亠 从仍舒? 亳舒仍从舒
1.1 String 
弌仂从仂于仂亠 亰仆舒亠仆亳亠 仗亠亟舒于仍磳 仂弍仂亶 亠仗仂从, 仂仂 亳亰 仆仍 
亳仍亳 弍仂仍亠亠 亰仆舒从仂于 Unicode (弍从于, 亳 亳仍亳 亰仆舒从仂于 仗仆从舒亳亳). 
弌仂从仂于亶 亳仗 亟舒仆仆 亳仗仂仍亰亠 亟仍 仗亠亟舒于仍亠仆亳 亠从舒 于 
JavaScript. 仍 于从仍ム亠仆亳 于 从亳仗 仂从仂于 仍亳亠舒仍仂于, 亳 
仆亠仂弍仂亟亳仄仂 亰舒从仍ム亳 于 仂亟亳仆舒仆亠 亳仍亳 亟于仂亶仆亠 从舒于从亳.  
仂从舒, 亰舒从仍ム亠仆仆 于 仂亟亳仆舒仆亠 从舒于从亳, 仄仂亢仆仂 亳仗仂仍亰仂于舒 
亟于仂亶仆亠 从舒于从亳, 舒 于 仂从舒, 亰舒从仍ム亠仆仆 于 亟于仂亶仆亠 从舒于从亳, 
仄仂亢仆仂 亳仗仂仍亰仂于舒 仂亟亳仆舒仆亠 从舒于从亳. 亳亢亠 仗亠亟舒于仍亠仆 
仗亳仄亠 仂从: 
"String!" 
'"String!" String.' 
"12345" 
's'
弍舒亳亠 于仆亳仄舒仆亳亠, 仂 JavaScript 仆亠 亳仄亠亠 亳仗舒 亟仍 仗亠亟舒于仍亠仆亳 
仂亟亳仆仂仆仂亞仂 亳仄于仂仍舒. 仍 仗亠亟舒于仍亠仆亳 仂亟亠仍仆仂亞仂 亳仄于仂仍舒 于 
JavaScript 亳仗仂仍亰亠 仂从舒, 从仂仂舒 仂仂亳 仂仍从仂 亳亰 仂亟仆仂亞仂 
亳仄于仂仍舒. 弌仂从舒, 仆亠 仂亟亠亢舒舒 亰仆舒从仂于 ("") 仆舒亰于舒亠 仗仂亶 
仂从仂亶 (亳仍亳 仂从仂亶 仆仍亠于仂亶 亟仍亳仆). 
仍 仗亠亟舒于仍亠仆亳 亰仆舒从仂于, 从仂仂亠 仆亠于仂亰仄仂亢仆仂 于于亠亳 弍亠亰 
仗亠仂弍舒亰仂于舒仆亳, 于 JavaScript 仗亠亟仄仂亠仆 escape- 
仗仂仍亠亟仂于舒亠仍仆仂亳, 于从仍ム舒亠仄亠 于 仂从亳. 
舒仗亳仄亠, t 亰舒亟舒亠 亳仄于仂仍 舒弍仍亳亳.
1.2 Number 
  JavaScript, 仆亠 舒亰仍亳亳 仄亠亢亟 亠仍仄 亳仍仂仄 亳 亳仍仂仄  仗仍舒于舒ム亠亶 
亰舒仗仂亶; 亳仍仂 JavaScript 仄仂亢亠 弍 亳 亠仄, 亳 亠仄 (仗仂 亳, JavaScript 
仗亠亟舒于仍磳 于亠 亳仍舒 于 从舒亠于亠 亰仆舒亠仆亳  仗仍舒于舒ム亠亶 亰舒仗仂亶). 
 丶亠仍仂亳仍亠仆仆亠 亰仆舒亠仆亳 仄仂亞 弍 仗仂仍仂亢亳亠仍仆仄亳 亠仍仄亳 亳仍舒仄亳, 
仂亳舒亠仍仆仄 亠仍仄亳 亳仍舒仄亳 亳 0.  从舒亠于亠 仂仆仂于 仗亠亟舒于仍亠仆亳 亳 
亳亠仍 仄仂亢仆仂 亳仗仂仍亰仂于舒 10 (亟亠亳仆仂亠 仗亠亟舒于仍亠仆亳亠), 16 
(亠仆舒亟舒亠亳仆仂亠 仗亠亟舒于仍亠仆亳亠) 亳 8 (于仂仄亠亳仆仂亠 仗亠亟舒于仍亠仆亳亠). 
仂仍亳仆于仂 亳亠仍 于 JavaScript 亰舒仗亳于舒ム 于 亟亠亳仆仂仄 仗亠亟舒于仍亠仆亳亳. 
 亠 亠仆舒亟舒亠亳仆亠 ("hex") 亠仍亠 亳仍舒 仂亟亠亢舒 仗亠亳从 "0x" (仆仂仍 亳 
x|X).  亳 仂舒于 仄仂亞 于仂亟亳 仂仍从仂 亳 仂 0 亟仂 9 亳 弍从于 仂 A 亟仂 F (于 
于亠仆亠仄 亳仍亳 仆亳亢仆亠仄 亠亞亳亠). 从于 A-F 亳仗仂仍亰ム 亟仍 仗亠亟舒于仍亠仆亳 
亟亠亳仆 亳亠仍 仂 10 亟仂 15. 丐仂 亠 亠仆舒亟舒亠亳仆仂亠 亳仍仂 0xF 
从于亳于舒仍亠仆仆仂 亟亠亳仆仂仄 亳仍 15, 舒 0x10 从于亳于舒仍亠仆仆仂 亳仍 16. 
 亠 于仂仄亠亳仆亠 亠仍亠 亳仍舒 仂亟亠亢舒 仗亠亳从 "0" (仆仂仍).  亳 仂舒于 
仄仂亞 于仂亟亳 仂仍从仂 亳 仂 0 亟仂 7. 丼亳仍仂, 从仂仂仂亠 仆舒亳仆舒亠  亳 "0" 
亳 仂亟亠亢亳 亳 "8" 亳 (亳仍亳) "9", 亳仆亠仗亠亳亠 从舒从 亟亠亳仆仂亠.
 仂仄亠亳仆亠 亳 亠仆舒亟舒亠亳仆亠 亳仍舒 仄仂亞 弍 仂亳舒亠仍仆仄亳, 
仂亟仆舒从仂 仂仆亳 仆亠 仄仂亞 仂亟亠亢舒 亟仂弍仆 舒 亳 亳 仆亠于仂亰仄仂亢仆仂 亰舒仗亳舒 于 
仆舒仆仂亶 (从仗仂仆亠仆亳舒仍仆仂亶) 仆仂舒亳亳. 
 仂仄亠 仂亞仂, JavaScript 仂亟亠亢亳 亳仍舒 仂 仍亠亟ム亳仄亳 仗亠亳舒仍仆仄亳 
亰仆舒亠仆亳礆亳: 
 NaN (仆亠 亳仍仂). 仗仂仍亰亠 仗亳 于仗仂仍仆亠仆亳亳 仄舒亠仄舒亳亠从仂亶 仂仗亠舒亳亳 
仆舒亟 仆亠亟仂仗亳仄仄亳 亟舒仆仆仄亳, 舒从亳仄亳 从舒从 仂从亳 亳仍亳 仆亠仂仗亠亟亠仍亠仆仆仂亠 
亰仆舒亠仆亳亠 
 仂仍仂亢亳亠仍仆舒 弍亠从仂仆亠仆仂. 仗仂仍亰亠, 亠仍亳 仗仂仍仂亢亳亠仍仆仂亠 亳仍仂 
仍亳从仂仄 于亠仍亳从仂 亳 仆亠 仄仂亢亠 弍 仗亠亟舒于仍亠仆仂 于 JavaScript 
 亳舒亠仍仆舒 弍亠从仂仆亠仆仂. 仗仂仍亰亠, 亠仍亳 仂亳舒亠仍仆仂亠 亳仍仂 
仍亳从仂仄 于亠仍亳从仂 亳 仆亠 仄仂亢亠 弍 仗亠亟舒于仍亠仆仂 于 JavaScript 
 仂仍仂亢亳亠仍仆亶 亳 仂亳舒亠仍仆亶 0. JavaScript 舒亰仍亳舒亠 仗仂仍仂亢亳亠仍仆亶 亳 
仂亳舒亠仍仆亶 仆仂仍.
1.3 Boolean 
 仂 于亠仄 从舒从 仂从仂于亠 亳 亳仍仂于亠 亳仗 亟舒仆仆 仄仂亞 仗亳仆亳仄舒 
仗舒从亳亠从仂亠 仆亠仂亞舒仆亳亠仆仆仂亠 亳仍仂 舒亰仍亳仆 亰仆舒亠仆亳亶, 
仍仂亞亳亠从亳亶 亳仗 亟舒仆仆 仄仂亢亠 仗亳仆亳仄舒 仂仍从仂 亟于舒 亰仆舒亠仆亳. 亅仂 
仍亳亠舒仍 true 亳 false. 仂亞亳亠从仂亠 亰仆舒亠仆亳亠 磦仍磳 亰仆舒亠仆亳亠仄 
亳亳仆仆仂亳: 仂仆仂 仂仗亠亟亠仍磳, 磦仍磳 仍亳 仍仂于亳亠 亳亳仆仆仄 亳仍亳 仆亠. 
亠亰仍舒 舒于仆亠仆亳 于 从亳仗舒 于亠亞亟舒 弍亟亠 亳仄亠 亳仗 仍仂亞亳亠从仂亞仂 
亰仆舒亠仆亳. 亳仄亠: (x == 124)
1.4 Object 
 弍亠从 JavaScript 仗亠亟舒于仍ム 仂弍仂亶 从仂仍仍亠从亳亳 于仂亶于 亳 仄亠仂亟仂于 (仆舒仍仂亞 
Map 于 Java). 亠仂亟仂仄 仆舒亰于舒亠 仆从亳, 磦仍ム舒 仍亠仆仂仄 仂弍亠从舒. 
弌于仂亶于仂 仗亠亟舒于仍磳 仂弍仂亶 亰仆舒亠仆亳亠 亳仍亳 仆舒弍仂 亰仆舒亠仆亳亶 (于 于亳亟亠 仄舒亳于舒 
亳仍亳 仂弍亠从舒), 从仂仂亶 磦仍磳 仍亠仆仂仄 仂弍亠从舒. JavaScript 仗仂亟亟亠亢亳于舒亠 
亠亠 亳仗舒 仂弍亠从仂于: 于仂亠仆仆亠 仂弍亠从, 仂亰亟舒于舒亠仄亠 仂弍亠从, 
仗亠亟仂舒于仍磳仄亠 仂仆仂于仆仄 亰仍仂仄 仂弍亠从 (仆舒仗亳仄亠, window 亳 document 于 
弍舒亰亠亠) 亳 仂弍亠从 ActiveX. 
 亠 仂弍亠从 于 JavaScript 仗仂亟亟亠亢亳于舒ム 于仂亶于舒 亳 仄亠仂亟 "expando", 舒 舒从亢亠 
于仂亶于舒, 从仂仂亠 仄仂亞 弍 亟仂弍舒于仍亠仆 亳 亟舒仍亠仆 于仂 于亠仄 于仗仂仍仆亠仆亳. 
亅亳 于仂亶于舒 亳 仄亠仂亟 仄仂亞 亳仄亠 仍ミ英亠 亳仄亠仆舒, 于从仍ム舒 亳仍舒. 仍亳 亳仄 
于仂亶于舒 亳仍亳 仄亠仂亟 磦仍磳 仗仂仄 亳亟亠仆亳亳从舒仂仂仄, 仂 仂仆仂 仄仂亢亠 弍 
从舒亰舒仆仂 亠亠亰 仂从 仗仂仍亠 亳仄亠仆亳 仄亠仂亟舒, 仆舒仗亳仄亠:
var myObj = new Object(); 
myObj.name = "Fred"; 
myObj.age = 42; 
myObj.getAge = 
function () { 
return this.age; 
}; 
document.write(myObj.name); 
document.write("<br/>"); 
document.write(myObj.age); 
document.write("<br/>"); 
document.write(myObj.getAge()); 
// Output: 
// Fred 
// 42 
// 42 
仂亢仆仂 仂亰仆舒从仂仄亳  亳仄 于 仗亳仄亠亠 example-001.html
 仍亳 亳仄 于仂亶于舒 亳仍亳 仄亠仂亟舒 仆亠 磦仍磳 仗仂仄 亳亟亠仆亳亳从舒仂仂仄 亳仍亳 
仆亠亳亰于亠仆仂 于 仄仂仄亠仆 仆舒仗亳舒仆亳 从亳仗舒, 仂 仄仂亢仆仂 亳仗仂仍亰仂于舒 于舒亢亠仆亳亠 
于 从于舒亟舒仆 从仂弍从舒 亟仍 仂弍仂亰仆舒亠仆亳 于仂亶于舒. 亠亠亟 亟仂弍舒于仍亠仆亳亠仄 从 
仂弍亠从 亳仄亠仆舒 于亠 于仂亶于 "expando" 于 JavaScript 仗亠仂弍舒亰ム 于 仂从亳. 
var myObj = new Object(); 
// Add two expando properties that cannot be written in the 
// object.property syntax. 
// The first contains invalid characters (spaces), so must be 
// written inside square brackets. 
myObj["not a valid identifier"] = "This is the property value"; 
// The second expando name is a number, so it also must 
// be placed inside square brackets 
myObj[100] = "100";
仂仍亳 亟仂仗 从 舒从亳仄 于仂亶于舒仄 仄仂亢仆仂 仂仍从仂 亳仗仂仍亰 亳 仂从仂于亠 
亰仆舒亠仆亳 亳仍亳 仂弍仂亟 仗仂 for each. 
仍 仂亰亟舒仆亳 仂弍亠从仂于 仄仂亢仆仂 亳仗仂仍亰仂于舒 舒从亢亠, 舒从 仆舒亰于舒亠仄 JavaScript 
Object Notation (JSON). 
舒仗亳仄亠: 
var pasta = {grain: "wheat", width: 0.5, shape: "round"};
1.5 Array 
  JavaScript 仂弍亠从 亳 仄舒亳于 仂弍舒弍舒于舒ム 仗舒从亳亠从亳 
仂亟亳仆舒从仂于仂, 仗仂从仂仍从 仄舒亳于  仂 仗亠亳舒仍仆亶 亳仗 仂弍亠从舒. 
仆亳 仂弍舒 仄仂亞 仂亟亠亢舒 于仂亶于舒 亳 仄亠仂亟. 
  仂仍亳亳亠 仂 仂弍亠从仂于, 仄舒亳于 亳仄亠ム 于仂亶于仂 length. 亳 
仗亳于仂亠仆亳亳 亰仆舒亠仆亳 从 仍亠仄亠仆 仄舒亳于舒, 亳仆亟亠从 从仂仂仂亞仂 
弍仂仍亠 亟仍亳仆 (仆舒仗亳仄亠, myArray[100] = "hello"), 于仂亶于仂 length 
舒于仂仄舒亳亠从亳 于亠仍亳亳于舒亠 亟仂 仆仂于仂亶 亟仍亳仆. 仆舒仍仂亞亳仆仂, 仗亳 
仄亠仆亠仆亳亳 亰仆舒亠仆亳 于仂亶于舒 length, 仍ミ頴笑 仍亠仄亠仆  亳仆亟亠从仂仄 
亰舒 仗亠亟亠仍舒仄亳 亟仍亳仆 仄舒亳于舒 亟舒仍磳.
// An array with three elements 
var myArray = new Array(3); 
// Add some data 
myArray[0] = "Hello"; 
myArray[1] = 42; 
myArray[2] = new Date(2000, 1, 1); 
document.write("original length is: " + myArray.length); 
document.write("<br/>"); 
// Add some expand properties 
myArray.expando = "JavaScript!"; 
myArray["another Expando"] = "Windows"; 
// This will still display 3, since the two expando properties 
// don't affect the length. 
document.write("new length is : " + myArray.length); 
// Output: 
// original length is: 3 
// new length is : 3
1.6 null 
丐亳仗 亟舒仆仆 null 亳仄亠亠 仂仍从仂 仂亟仆仂 亰仆舒亠仆亳亠 于 JavaScript: 亰仆舒亠仆亳亠 
null. 仍ム亠于仂亠 仍仂于仂 null 仆亠于仂亰仄仂亢仆仂 亳仗仂仍亰仂于舒 于 从舒亠于亠 
亳仄亠仆亳 仆从亳亳 亳仍亳 仗亠亠仄亠仆仆仂亶. 
亠亠仄亠仆仆舒, 从仂仂舒 仂亟亠亢亳 null, 仆亠 仂亟亠亢亳 亟仂仗亳仄 
Number, String, Boolean, Array 亳仍亳 Object. 仂亢仆仂 亠亠 
仂亟亠亢亳仄仂亠 仗亠亠仄亠仆仆仂亶 (仆亠 亟舒仍 仗亠亠仄亠仆仆), 仗亳于舒亳于舒 亠亶 
亰仆舒亠仆亳亠 null. 
弍舒亳亠 于仆亳仄舒仆亳亠, 仂 于 JavaScript 亰仆舒亠仆亳亠 null  仆亠 仂 亢亠 舒仄仂亠, 
仂 0 (从舒从 于 C 亳 C++). 仂仄亠 仂亞仂, 仂仗亠舒仂 typeof 于 JavaScript 
仂仗亠亟亠仍磳 亰仆舒亠仆亳 null 从舒从 亰仆舒亠仆亳 亳仗舒 Object, 舒 仆亠 亳仗舒 null. 
丐舒从仂亠 仗仂于亠亟亠仆亳亠, 从仂仂仂亠 仄仂亢亠 亰舒仗舒 舒亰舒弍仂亳从仂于, 
亳仗仂仍亰亠 于 亠仍 仂弍舒仆仂亶 仂于仄亠亳仄仂亳.
1.7 undefined 
仆舒亠仆亳亠 undefined 于仂亰于舒舒亠 仗亳 亳仗仂仍亰仂于舒仆亳亳 于仂亶于舒 
仂弍亠从舒, 从仂仂仂亠 仆亠 亠于亠, 亳仍亳 仗亠亠仄亠仆仆仂亶, 从仂仂舒 弍仍舒 
仂弍磦仍亠仆舒, 仆仂 舒从 亳 仆亠 仗仂仍亳仍舒 亰仆舒亠仆亳. 
仂亢仆仂 仗仂于亠亳, 亠于亠 仍亳 仗亠亠仄亠仆仆舒, 舒于仆亳于舒 亠亠  
undefined, 仂亟仆舒从仂 仄仂亢仆仂 仗仂于亠亳, 磦仍磳 仍亳 亠亠 亳仗 undefined, 
舒于仆亳于舒 亳仗 仗亠亠仄亠仆仆仂亶 仂 仂从仂亶 "undefined".  仍亠亟ム亠仄 
仗亳仄亠亠 仗仂从舒亰舒仆仂, 从舒从 仂仗亠亟亠仍亳, 弍仍舒 仍亳 仂弍磦仍亠仆舒 仗亠亠仄亠仆仆舒 
x:
var x; 
// This method works. 
if (x == undefined) { 
document.write("comparing x to undefined <br/>"); 
} 
// This method works. 
if (x == null) { 
document.write("comparing x to null <br/>"); 
} 
// This method doesn't work - you must check for the string "undefined". 
if (typeof(x) == undefined) { 
document.write("comparing the type of x to undefined <br/>"); 
} 
// This method does work. 
if (typeof(x) == "undefined") { 
document.write("comparing the type of x to the string 'undefined'"); 
} 
// Output: 
// comparing x to undefined 
// comparing x to null 
// comparing the type of x to the string 'undefined' 
undefined 亟仂于仂仍仆仂 舒仆仆亶 
亰于亠亠从, 仍仂于仆仂 亞仂于仂, 仂仆仂 
仂弍仂亰仆舒舒亠 仂 "亟舒仆仆 仆亠". 
亠 null, 舒 亟舒仆仆 仆亠. 
仂仆亳仄舒亶亠 从舒从 仂亳亠.
1.8 亠仂弍舒亰仂于舒仆亳亠 亳仗仂于 
亠仂弍舒亰仂于舒仆亳亠 亳仗舒 仄仂亢仆仂 磦仆仄 仂弍舒亰仂仄 亟亠仍舒 亠亠亰 亠亞仂 
仆舒亰于舒仆亳亠: 
var test = Boolean("something") // true
2. OOP in JavaScript. 2.1 Object 
弍亠从 于 JavaScript  仂 仗仂仂 从仂仍仍亠从亳 仗舒 从仍ム-亰仆舒亠仆亳亠 (亳 仆亠仄仆仂亞仂 
于仆亠仆仆亠亶 仄舒亞亳亳). 亟仆舒从仂, 于 JavaScript 仆亠 从仂仆亠仗亳亳 从仍舒舒.  仗亳仄亠, 
仂弍亠从  于仂亶于舒仄亳 {name: Eugene, age: 16} 仆亠 磦仍磳 从亰亠仄仗仍仂仄 从舒从仂亞仂- 
仍亳弍仂 从仍舒舒 亳仍亳 从仍舒舒 Object.  Object, 亳 Eugene 磦仍ム 从亰亠仄仗仍舒仄亳 舒仄亳 
亠弍. 仆亳 仂仗亠亟亠仍ム 仆亠仗仂亠亟于亠仆仆仂 仂弍于亠仆仆仄 仗仂于亠亟亠仆亳亠仄. 丐 仆亠 
仍仂 仄亠舒-亟舒仆仆 (.亠. 从仍舒仂于), 从仂仂亠 亞仂于仂亳仍亳 弍 亳仄 仂弍亠从舒仄 从舒从 仆亢仆仂 
亠弍 于亠亳. 
弌舒亰 于仂亰仆亳从舒亠 于仂仗仂: 束WTF?損, 仂仂弍亠仆仆仂 亠仍亳 于 仗亳仍亳 亳亰 仄亳舒 
从仍舒亳亠从亳 仂弍亠从仆仂-仂亳亠仆亳仂于舒仆仆 磶从仂于 (舒从亳 从舒从 Java 亳仍亳 C#). 束仂 
亠仍亳 从舒亢亟亶 仂弍亠从 仂弍仍舒亟舒亠 仂弍于亠仆仆仄 仗仂于亠亟亠仆亳亠仄 (于仄亠仂 仂亞仂 仂弍 
仆舒仍亠亟仂于舒 亠亞仂 仂 仂弍亠亞仂 从仍舒舒), 仂 亠仍亳  仄亠仆 100 仂弍亠从仂于, 仂 亳仄 
仂仂于亠于亠 100 舒亰仆 仄亠仂亟仂于? 舒亰于亠 仂 仆亠 仂仗舒仆仂?  从舒从 仄仆亠 亰仆舒, 仂, 
仆舒仗亳仄亠, 仂弍亠从 亟亠亶于亳亠仍仆仂 磦仍磳 Array-亠仄?損
丼仂弍 仂于亠亳 仆舒 于亠 亳 于仂仗仂 仆亠仂弍仂亟亳仄仂 亰舒弍 仂 从仍舒亳亠从仂仄 - 
仗仂亟仂亟亠 亳 仆舒舒 于  仆仍. 仆仂 仂亞仂 仂亳. 
仂亟亠仍 仗仂仂亳仗仆仂亞仂  仗亳仆仂亳 仆亠从仂仍从仂 仆仂于 亟亳仆舒仄亳仆 亳 
从仗亠亳于仆 仗亠亶 亠亠仆亳 舒 仗仂弍仍亠仄.  仆亠亶 舒从亢亠 仗亠亟舒于仍亠仆 
仄仂仆亠 仄仂亟亠仍亳 舒亳亠仆亳 亳 仗仂于仂仆仂亞仂 亳仗仂仍亰仂于舒仆亳 从仂亟舒 (舒 仂 亳 
亳仆亠亠亠 仍ミ莞黍, 从仂仂亠 亞仂于仂 仂弍 仂弍亠从仆仂-仂亳亠仆亳仂于舒仆仆仂仄 
仗仂亞舒仄仄亳仂于舒仆亳亳). 亟仆舒从仂, 舒 仄仂亟亠仍 亟舒 仄亠仆亠 亞舒舒仆亳亶. 舒仗亳仄亠, 
仆亠仍亰 仗仂仍舒亞舒, 仂 仂弍亠从 x 于亠亞亟舒 弍亟亠 亳仄亠 仂亟亳仆 亳 仂 亢亠 仆舒弍仂 于仂亶于. 
弍亠从 于 JavaScript 仂亰亟舒  仗仂仄仂 仆从亳亳 Object.create. 亅舒 仆从亳 亳亰 
仂亟亳亠仍 亳 仂仗亳仂仆舒仍仆仂亞仂 仆舒弍仂舒 于仂亶于 仂亰亟舒 仆仂于 仆仂. 
丐舒从 从舒从 仂弍亠从  仂 仗仂仂 仗舒 仆亳从舒仍仆 从仍ム亠亶  仂仂于亠于ム亳仄亳 
亰仆舒亠仆亳礆亳  舒从亳亠 仗舒 仆舒亰于舒ム 于仂亶于舒.  仗亳仄亠, 于 仂亳亠 仂仗亳舒 
仆亠从仂仍从仂 舒仗亠从仂于 于仂亠亞仂 舒仂亞仂 亟亞舒 (仆舒亰仂于仄 亠亞仂 豫亟亢亳仆, 仂仆 亢亠 Eugene), 
舒从亳 从舒从 于仂亰舒, 亳仄 亳 仗仂仍. 舒从, 舒从舒亟亠仄亳亠从亳亶 仗仂仂弍:
var Eugene = Object.create(null) 
仍舒亳从舒 : 
var Eugene = new Object() 
丕仗仂亠仆仆舒 仆仂舒亳: 
var Eugene = {}
2.1.1 弌于仂亶于舒 仂弍亠从仂于 
弌于仂亶于舒 于 JavaScript 磦仍ム 亟亳仆舒仄亳亠从亳仄亳. 亅仂 仂亰仆舒舒亠, 仂 仄 亳 仄仂亢亠仄 
仂亰亟舒于舒 亳仍亳 亟舒仍 于 仍ミ頴笑 于亠仄. 弌于仂亶于舒 仆亳从舒仍仆 于 仂仄 仄仍亠, 仂 
从仍ム 于仂亶于舒 于仆亳 仂弍亠从舒 仂仂于亠于亠 仂于仆仂 仂亟仆仂仄 亰仆舒亠仆亳. 
 Javascript 亠 仆从亳, 仗仂亰于仂仍ム舒 仂亰亟舒 于仂亶于仂 仂弍磻舒, 仗舒于亳仍仆仂: 
Object.defineProperty.  从舒亠于亠 舒亞仄亠仆仂于 仂仆舒 亳仗仂仍亰亠 仂弍亠从, 亳仄 
于仂亶于舒 亟仍 仂亰亟舒仆亳 亳 亟亠从亳仗仂, 仂仗亳于舒ム亳亶 亠仄舒仆亳从 于仂亶于舒. 
舒仗亳仄亠: 
Object.defineProperty(Eugene, 'name', { value: 'Eugene' , writable: true , 
configurable: true , enumerable: true }) 
仍亳 仗仂亠仆仆仂: 
Eugene.name = 'Eugene' 
Eugene['name'] = 'Eugene'
仍 亟舒仍亠仆亳 于仂亶于舒 亳亰 仂弍亠从舒 于 JavaSCript 仗亠亟仄仂亠仆 仂仗亠舒仂 delete.  
仗亳仄亠, 亠仍亳 于 仂亳亠 亟舒仍亳 于仂亶于仂 gender 亳亰 仆舒亠亞仂 仂弍亠从舒 mikhail: 
delete Eugene [name] 
// => true 
Eugene [name] 
// => undefined
2.1.2 亠亠 亳 亠亠 
Getter- 亳 setter- 仂弍仆仂 亳仗仂仍亰ム 于 从仍舒亳亠从亳 仂弍亠从仆仂-仂亳亠仆亳仂于舒仆仆 磶从舒 亟仍 
仂弍亠仗亠亠仆亳 亳仆从舒仗仍亳亳. 亠亠 亳 亠亠 于 JavaScript 仗仂亰于仂仍磳 仂弍亠仗亠亳 proxy 亟仍 
亰舒仗仂仂于 仆舒 亠仆亳亠 亳 亰舒仗亳 于仂亶于. 仂从仂仍从 仗仂仆亳亠 仂弍仍舒亳 于亳亟亳仄仂亳 于 JavaScript 仆亠, 仂 亳 
亰舒亟舒 亳仆从舒仗仍亳亳 亞亠亠/亠亠 仆亠 亠舒ム. 亳仄亠 从仍舒亳亠从仂亞仂 仂仗亠亟亠仍亠仆亳 
亠亠舒/弌亠亠舒: 
Object.defineProperty(Illya, 'name', { 
configurable: true, 
enumerable: true, 
get: function () { 
return "My Name is: " + this._name; 
}, 
set: function (value) { 
this._name = value; 
} 
});
2.1.3 亠仂亟 仂弍亠从舒 
仗亳舒仆亳亠 亟亠亶于亳亶, 从仂仂亠 仄仂亢仆仂 亟亠仍舒  仂弍亠从仂仄 亟亠仍舒亠 于 JavaScript 仂亠仆 仗仂仂. 
仂亠仄? 舒, 仗仂仂仄, 仂 于 JavaScript 仆亠 舒亰仆亳 仄亠亢亟 仄舒仆亳仗仍亳仂于舒仆亳亠仄 舒从亳仄亳 于亠舒仄亳, 
从舒从 Function, Number, Object.  亟亠仍舒亠 仂亟亳仆舒从仂于仂. ミ頴笑 仄亠仂亟 磦仍磳 仗仂仂 于仂亶于仂仄 
亠从亠亞仂 仂弍亠从舒 亳仗舒 Function, 从仂仂仂亠 仂亰亟舒亠 亟亳仆舒仄亳亠从亳 亳 仄仂亢亠 弍 亳仗仂仍亰仂于舒仆仂 于 
从仂仆亠从亠 仂亞仂 仂弍亠从舒. 
亳仄亠: 
var Eugene = { name: "Eugene" }; 
Eugene.getName = function () { 
return this.name; 
}; 
Eugene.setName = function (value) { 
this.name = value; 
};
2.1.4 丼仂 舒从仂亠 this? 舒亞亳 于 亟亠亶于亳亳 
this  仂 仂亟仆舒 亳亰 舒仄 于舒亢仆 仗亠亠仄亠仆仆 于 JavaScript, 仂仆舒 舒仆亳 于 亠弍亠 
仍从 仆舒 仂弍亠从, 从仂仂仂仄 仗亳仆舒亟仍亠亢亳 亳仗仂仍仆ム舒 仆从亳. 亅仂 仆亠 
仂弍磶舒亠仍仆仂 仂亰仆舒舒亠, 仂 this 于亠亞亟舒 舒于仆仂 仂弍亠从, 于 从仂仂仂仄 仆从亳 
舒仆亳. 亠, JavaScript 仆亠 仆舒仂仍从仂 亞仂亳亳亠仆. 
个仆从亳亳 磦仍ム generic-舒仄亳. 丐.亠. 于 JavaScript 仗亠亠仄亠仆仆舒 this 仂仗亠亟亠仍磳 
亟亳仆舒仄亳亠从 仍从, 从仂仂舒 舒亰亠舒亠 于 仄仂仄亠仆 亳仗仂仍仆亠仆亳 仆从亳亳. 
仂亠 亟亳仆舒仄亳亠从仂亞仂 舒亰亠亠仆亳 this 仂弍亠仗亠亳于舒亠 仆亠于亠仂仆仂 仄仂仆亶 
仄亠舒仆亳亰仄 亟仍 亟亳仆舒仄亳亰舒亳亳 仂弍亠从仆仂亶 仂亳亠仆亳仂于舒仆仆仂亳 JavaScript 亳 
从仂仄仗亠仆亳亠 仂于亳亠 仂亞仂亞仂 仂仂于亠于亳 亰舒亟舒仆仆仄 从舒仄 (.亠. 
从仍舒舒仄). 亅仂 仂亰仆舒舒亠, 仂 仄仂亢仆仂 仗亳仄亠仆亳 仆从亳 从 仍ミ頴笑煮 仂弍亠从, 
从仂仂亶 仂于亠舒亠 亠弍仂于舒仆亳礆 亰舒仗从舒, 仆亠亰舒于亳亳仄仂 仂 仂亞仂, 从舒从 仂亠仆 仂弍亠从
弌亠于亠 亠亠 舒亰仍亳仆 仗仂仂弍舒 舒亰亠亠仆亳 this 于 仆从亳亳, 亰舒于亳亳亠 仂 
仂亞仂, 从舒从 仆从亳 于亰于舒亠: 
 仆亠仗仂亠亟于亠仆仆仂, 从仂亞亟舒 仆从亳 于亰于舒亠 舒仄舒 仗仂 亠弍亠, 弍亠亰 仂弍亠从仆仂亞仂 
从仂仆亠从舒. 舒仗亳仄亠: someFunction1().  仂仄 仍亠舒亠 this 仂 亞仍仂弍舒仍仆亶 
从仂仆亠从 (于 弍舒亰亠亠 仂 仂弍亠从 window) 
 从舒从 仄亠仂亟, 仆舒仗亳仄亠: Eugene.getName(), 于 舒从仂仄 仍舒亠 this 弍亟亠 
仂亢亟亠于亠仆仆仂 仂弍亠从 Eugene. 
 磦仆仂 仗亳仄亠仆磳.  JavaScript 仍ミ頴委 仆从亳 仄仂亢亠 弍 于亰于舒仆舒 于 
从仂仆亠从亠 仆亠从仂仂仂亞仂 仂弍亠从舒 亳仗仂仍亰 仄亠仂亟 call 亳仍亳 apply. 舒仄仂亳仄 
仗亳仄亠:
function getObjectQName(parameter1) { 
var result = "My Name is: " + this.name; 
if (parameter1 != null) { 
result += ", and parameter1 is: " + parameter1; 
} 
return result; 
} 
getObjectQName.call(Eugene, "PAR-1"); // this === Eugene 
getObjectQName.call(Illya, "PARAMETER-1"); // this === Illya 
// Bind example 
Eugene.illyaNameFnc = getObjectQName.bind(Illya); 
writeLog(Eugene.illyaNameFnc("PAR-1")); // this === Illya
 从舒从 从仂仆从仂. 亅仂 从仂仆亠从 舒仄仂亳仄 仗仂亰亟仆亠亠.
2.1.5 亳亠舒仍仆亶 亳仆舒从亳 仂仗亠亟亠仍亠仆亳 
仂弍亠从舒 
仂仂亶 仗仂仂弍 仂亰亟舒 仂弍亠从 亰舒从仍ム舒亠 于 亳仗仂仍亰仂于舒仆亳亳 仍亳亠舒仍仆仂亞仂 
亳仆舒从亳舒 JavaScript. 亳亠舒仍仆亶 仂弍亠从 仂仗亠亟亠仍磳 仆仂于亶 仂弍亠从, 仂亟亳亠仍 
从仂仂仂亞仂 Object.prototype. 亳仄亠 仂亞仂 亳仆舒从亳舒 仗亳于亠亟亠仆 仆亳亢亠: 
var Eugene = { 
_name: "Eugene", 
_age: 18, 
get name() { return this._name; }, 
set name(value) { this._name = value; }, 
getAge: function(){ return this._age; } 
};
2.1.6 舒仍亠亟仂于舒仆亳亠 仂弍亠从仂于? 
 舒仍亠亟仂于舒仆亳亠 于 JavaScript 仂亠于仍磳 亠亠亰 从仍仂仆亳仂于舒仆亳亠 仗仂于亠亟亠仆亳 
仂弍亠从舒 亳 舒亳亠仆亳亠 亠亞仂 仗亠亳舒仍亳亰亳仂于舒仆仆仄 仗仂于亠亟亠仆亳亠仄. 弍亠从, 
仗仂于亠亟亠仆亳亠 从仂仂仂亞仂 从仍仂仆亳ム, 仆舒亰于舒亠 仗仂仂亳仗仂仄. 
 仂仂亳仗  仂 仂弍仆亶 仂弍亠从, 从仂仂亶 亟亠仍亳 于仂亳仄 仗仂于亠亟亠仆亳亠仄  
亟亞亳仄亳 仂弍亠从舒仄亳  于 仂仄 仍舒亠 仂仆 于仗舒亠 于 从舒亠于亠 仂亟亳亠仍. 
 仂仆亠仗 从仍仂仆亳仂于舒仆亳 仗仂于亠亟亠仆亳 仆亠 仂亰仆舒舒亠, 仂 于 弍亟亠亠 亳仄亠 亟于亠 
舒亰仍亳仆亠 从仂仗亳亳 仂亟仆仂亶 亳 仂亶 亢亠 仆从亳亳 亳仍亳 亟舒仆仆. 舒 舒仄仂仄 亟亠仍亠 
JavaScript 亠舒仍亳亰亠 仆舒仍亠亟仂于舒仆亳亠 亠亠亰 亟亠仍亠亞亳仂于舒仆亳亠, .亠. 于亠 于仂亶于舒 
舒仆 于 仂亟亳亠仍亠, 舒 亟仂仗 从 仆亳仄 舒亳亠仆 亠亠亰 亠弍仆从舒. 
 舒从 仗仂仄亳仆舒仍仂 舒仆亠亠, 仂亟亳亠仍 (亳仍亳 [[Prototype]]) 仂弍亠从舒 仂仗亠亟亠仍磳 
于亰仂于仂仄 Object.create  仗亠于仄 舒亞仄亠仆仂仄, 仍舒ム亳仄 仆舒 仂弍亠从- 
仂亟亳亠仍. 舒仄仂亳仄 仗亳仄亠:
var Person = { 
_name: "Unknown", 
_age: 0, 
get name() { return this._name; }, 
set name(value) { this._name = value; }, 
getLocalName: function(){ return "Person: " + this._name; }, 
getAge: function(){ return this._age; } 
}; 
writeLog(Person.name); 
writeLog(Person.getAge()); 
var Eugene = Object.create(Person); 
Eugene.name = "Eugene"; 
Eugene._age = 18; 
writeLog(Eugene.name); 
writeLog(Eugene.getAge()); 
writeLog(""); 
writeLog("Dynamically overloading getLocalName() object method"); 
writeLog(Eugene.getLocalName()); 
Eugene.getLocalName = function () { return "From Eugene: " + this._name; }; 
writeLog(Eugene.getLocalName()); 
delete Eugene.getLocalName; 
writeLog(Eugene.getLocalName());
JavaScript 亠舒仍亳亰亠 亟亠仍亠亞亳仂于舒仆亳亠 亟仂仗舒 从 于仂亶于舒仄, .亠. 于仂亶于仂 亳亠 
亠亠亰 于亠 仂亟亳亠仍亠亶 仂弍亠从舒. 
亅舒 亠仗 仂亟亳亠仍亠亶 仂仗亠亟亠仍磳 从仄 仍仂仂仄 于 从舒亢亟仂仄 仂弍亠从亠, 从仂仂亶 
仆舒亰于舒亠 [[Prototype]].  仆亠 仄仂亢亠亠 亳亰仄亠仆亳 亠亞仂 仆亠仗仂亠亟于亠仆仆仂, 
亠于亠 仂仍从仂 仂亟亳仆 仗仂仂弍 亰舒亟舒 亠仄 亰仆舒亠仆亳亠  仗亳 仂亰亟舒仆亳亳 仆仂于仂亞仂 
仂弍亠从舒. 
仂亞亟舒 于仂亶于仂 亰舒仗舒亳于舒亠 亳亰 仂弍亠从舒, 亟于亳亢仂从 仆舒舒仍舒 仗舒亠 仗仂仍亳 
于仂亶于仂 亳亰 亠仍亠于仂亞仂 仂弍亠从舒. 仍亳 于仂亶于仂 仆亠 仆舒亶亟亠仆仂, 仂 舒仄舒亳于舒亠 
仆亠仗仂亠亟于亠仆仆亶 仂亟亳亠仍 仂弍亠从舒, 亰舒亠仄 仂亟亳亠仍 仂亟亳亠仍 亳 .亟. 
亅仂 仂亰仆舒舒亠, 仂 仄 仄仂亢亠仄 亳亰仄亠仆亳 仗仂于亠亟亠仆亳亠 仗仂仂亳仗舒 于 亠亠亟亳仆亠 
仗仂亞舒仄仄, 仂 舒于仂仄舒亳亠从亳 亳亰仄亠仆亳 仗仂于亠亟亠仆亳亠 于亠 仂弍亠从仂于, 从仂仂亠 
弍仍亳 仂 仆亠亞仂 仆舒仍亠亟仂于舒仆.
2.2 Class. 2.2.1 仍舒 
舒从, 舒仄舒 弍仂仍舒 仄舒亞亳.  JavaScript 从仍舒  仂 仆从亳亳! WTF? 
ミ頴委 仆从亳, 从仂仄亠 仆亠从仂仂 于仂亠仆仆, 仄仂亢亠 弍 亳仆亳亳舒仍亳亰亳仂于舒仆舒 
从舒从 仂弍亠从. 仍 仂亞仂 亠亠 仆亢仆仂 于亰于舒 亠亠亰 亟亳亠从亳于 new. 舒从: 
RiaShamans.JSExamples.Person = function (name, age, mass) { 
this.name = name; 
this.age = age; 
this.mass = mass; 
}; 
var Eugene = new ("Eugene", 18, 65);
仂 于亠仄 舒弍仂 仆从亳亳, 于亰于舒仆仆仂亶 亟亳亠从亳于仂亶 new, 仆仂于仂仂亰亟舒于舒亠仄亶 
仂弍亠从 亟仂仗亠仆 从舒从 this, 舒从 仂 仄仂亢仆仂 仗仂舒于亳 仍ミ英亠 于仂亶于舒. 
仍舒 仂弍亠从舒 仂仗亠亟亠仍磳 仆从亳亠亶, 从仂仂舒 亠亞仂 仂亰亟舒仍舒. 仍 仗仂于亠从亳 
仗亳仆舒亟仍亠亢仆仂亳 从仍舒 亠 仂仗亠舒仂 instanceof: 
var Eugene = new RiaShamans.JSExamples.Person("Eugene", 18, 65); 
writeLog(Eugene instanceof RiaShamans.JSExamples.Person);
2.2.2 仂舒仆于舒 亳仄亠仆 亳 仗舒从亠 
仂从仂仍从 从仍舒 亳 仂弍亠从 亠舒仍亳亰ム 于 于亳亟亠 仗亠亠仄亠仆仆 (仗亠亠仄亠仆仆- 
仆从亳亶 亳 仗亠亠仄亠仆仆-仂弍亠从仂于), 仂 仗仂舒仆于舒 亳仄亠仆 仄仂亞 弍 
亠舒仍亳亰仂于舒仆 于 于亳亟亠 仗仂仍亠亶-仗亠亠仄亠仆仆 弍亠从仂于. 舒仗亳仄亠: 
if (typeof(RiaShamans) == "undefined") RiaShamans = {}; 
if (typeof(RiaShamans.JSExamples) == "undefined") RiaShamans.JSExamples = {}; 
丐舒从亳仄 仂弍舒亰仂仄 仂亰亟舒仆 仗舒从亠 RiaShamans.JSExamples, 从仂仂亶 仄仂亢亠 
亳仗仂仍亰仂于舒 亟仍 仂仗亠亟亠仍亠仆亳 从仍舒仂于 亳仍亳 仂弍亠从仂于. 舒仗亳仄亠:
if (typeof(RiaShamans) == "undefined") RiaShamans = {}; 
if (typeof(RiaShamans.JSExamples) == "undefined") RiaShamans.JSExamples = {}; 
/** 
* Class defines Person Entity 
* 
* @class {RiaShamans.JSExamples.Person} 
* @param name 
* @param age 
* @param mass 
* @returns {RiaShamans.JSExamples.Person} 
*/ 
RiaShamans.JSExamples.Person = function (name, age, mass) { 
};
2.2.3 仍舒 亳 仗仂仂亳仗. 舒仍亠亟仂于舒仆亳亠 
 javascript 弍舒亰仂于仂亠 仆舒仍亠亟仂于舒仆亳亠 仂仆仂于舒仆仂 仆亠 仆舒 从仍舒舒. 丐仂 亠, 仆亠 舒从仂亞仂, 仂 
从仍舒 仆舒仍亠亟ム 亟亞 仂 亟亞舒, 舒 仂弍亠从 从仍舒舒-仗仂仂仄从舒 仗仂仍舒亠 仂弍亳亠 
于仂亶于舒. 仄亠仂 仂亞仂 仂弍亠从 仆舒仍亠亟ム 仂 仂弍亠从仂于 弍亠亰 于磻亳 从仍舒仂于. 
舒仍亠亟仂于舒仆亳亠 仆舒 从仍舒舒 仄仂亢仆仂 仗仂仂亳(仄仍亳仂于舒), 仂仗亳舒 仆舒 弍舒亰仂于仂亠 
仆舒仍亠亟仂于舒仆亳亠 javascript. 
亠舒仍亳亰亠 仆舒仍亠亟仂于舒仆亳亠 亠亠亰 仆亠磦仆(于仆亠仆仆ム) 仍从 仂亟仆仂亞仂 仂弍亠从舒 
仆舒 亟亞仂亶, 从仂仂亶 仆舒亰于舒亠 亠亞仂 仗仂仂亳仗仂仄 亳 于 仗亠亳亳从舒亳亳 仂弍仂亰仆舒舒亠 
[[prototype]]. 亅仂 于仂亶于仂 仂弍仆仂 从仂 仂 仗仂亞舒仄仄亳舒. 丐舒从亢亠 亠于亠 
于仂亶于仂  仗仂仂亢亳仄 仆舒亰于舒仆亳亠仄 prototype (弍亠亰 从于舒亟舒仆 从仂弍仂从)  仂仆仂 
于仗仂仄仂亞舒亠仍仆仂亠 亳 从舒亰于舒亠, 仂从亟舒 弍舒 仗仂仂亳仗 仗亳 仂亰亟舒仆亳亳 仂弍亠从舒. 
仂亞亟舒 于 舒于亳亠 仆从亳亳 Person 于仂亶于仂 Person.prototype = XXX  于 亳仄 
亟亠从仍舒亳亠亠: "于亠 仆仂于亠 仂弍亠从 从仍舒舒 Person 弍亟 亳仄亠 仗仂仂亳仗 XXX". 
舒仄仂亳仄 仗亳仄亠:
if (typeof(RiaShamans) == "undefined") RiaShamans = {}; 
if (typeof(RiaShamans.JSExamples) == "undefined") RiaShamans.JSExamples = {}; 
/** 
* Class defines Person Entity 
* 
* @class {RiaShamans.JSExamples.Person} 
* @param name 
* @param age 
* @param mass 
* @returns {RiaShamans.JSExamples.Person} 
*/ 
RiaShamans.JSExamples.Person = function (name, age, mass) { 
this.initPerson(name, age, mass); 
}; 
RiaShamans.JSExamples.Person.prototype.constructor = RiaShamans.JSExamples.Person; 
/** 
* Initialize person Data 
* 
* @param name 
* @param age 
* @param mass 
*/ 
RiaShamans.JSExamples.Person.prototype.initPerson = function(name, age, mass){ 
this.name = name; 
this.age = age; 
this.mass = mass; 
};
/** 
* Returns Person name 
* 
* @returns {String} 
*/ 
RiaShamans.JSExamples.Person.prototype.getName = function(){ 
return this.name; 
}; 
/** 
* Returns person Age 
* 
* @returns Number 
*/ 
RiaShamans.JSExamples.Person.prototype.getAge = function(){ 
return this.age; 
}; 
/** 
* Class defines gendered Person Entity 
* 
* @class {RiaShamans.JSExamples.GenderPerson} 
* @augments {RiaShamans.JSExamples.Person} 
* @lends {RiaShamans.JSExamples.Person.prototype} 
*/ 
RiaShamans.JSExamples.GenderPerson = function (name, age, mass) { 
// Inherit parent constructor 
RiaShamans.JSExamples.GenderPerson.superclass.constructor.call(this, name, age, mass); // this is equivalent of 
RiaShamans.JSExamples.Person.call(this, name, age, mass); 
this.gender = "UNKNOWN"; 
};
// Implement Inheritance 
var GenderPersonPrototype = function(){}; 
GenderPersonPrototype.prototype = RiaShamans.JSExamples.Person.prototype; // Create prototype without parameters. We can't Instantiate Parent 
without proper data in some cases. 
RiaShamans.JSExamples.GenderPerson.prototype = new GenderPersonPrototype(); // Add all parent prototype data to Child class 
RiaShamans.JSExamples.GenderPerson.prototype.constructor = RiaShamans.JSExamples.GenderPerson; // Set constructor 
RiaShamans.JSExamples.GenderPerson.superclass = RiaShamans.JSExamples.Person.prototype; // Set superclass for Child 
/** 
* Returns Gender 
* 
* @returns {String} 
*/ 
RiaShamans.JSExamples.GenderPerson.prototype.getGender = function(){ 
return this.gender; 
}; 
/** 
* Set Gender for a Person 
* 
* @param value 
*/ 
RiaShamans.JSExamples.GenderPerson.prototype.setGender = function(value){ 
this.gender = value; 
};
2.2.4 弌舒亳亠从亳亠 仄亠仂亟 
仂从仂仍从 从仍舒 于 JavaScript (仂仆亳 亢亠 仆从亳亳), 仂 于 于仂 仂亠亠亟 仂弍亠从, 仂 
亟仍 仆亳 仄仂亢仆仂 仂仗亠亟亠仍 仗仂仍 于 于亳亟亠 仆从亳亶. 丐舒从舒 仆从亳 弍亟亠 亟仂仗仆舒 
弍亠亰 亳仆亳亳舒仍亳亰舒亳亳 仂弍亠从舒 从仍舒舒 亳 于 从仂仆亠从亠 舒仄仂亞仂 从仍舒舒, 磦仍 
舒仆舒仍仂亞仂仄 舒亳亠从仂亞仂 仄亠仂亟舒 于 从仍舒亳亠从仂仄 . 舒仄仂亳仄 仗亳仄亠:
/** 
* Factory class. Example of static methods 
* 
* @class {RiaShamans.JSExamples.PersonFactory} 
* @lends {RiaShamans.JSExamples.PersonFactory.prototype} 
*/ 
RiaShamans.JSExamples.PersonFactory = function(){ 
}; 
/** 
* Factory method. creates person and returns its instance 
* 
* @returns {RiaShamans.JSExamples.Person} 
*/ 
RiaShamans.JSExamples.PersonFactory.createPerson = function(name, age, mass){ 
var result = new RiaShamans.JSExamples.Person(name, age, mass); 
return result; 
};

More Related Content

What's hot (15)

仍舒于舒1: 弍亰仂 亠仆仂仍仂亞亳亳 Java
仍舒于舒1: 弍亰仂 亠仆仂仍仂亞亳亳 Java仍舒于舒1: 弍亰仂 亠仆仂仍仂亞亳亳 Java
仍舒于舒1: 弍亰仂 亠仆仂仍仂亞亳亳 Java
metaform
Java. Generic - 舒弍仍仂仆仆亠 亳仗.
Java.  Generic - 舒弍仍仂仆仆亠 亳仗.Java.  Generic - 舒弍仍仂仆仆亠 亳仗.
Java. Generic - 舒弍仍仂仆仆亠 亳仗.
Unguryan Vitaliy
于 Scala: 于仂亟 亳亰 亰舒仂 (ScalaNsk meeting #5, 22.11.2013)
 于 Scala: 于仂亟 亳亰 亰舒仂 (ScalaNsk meeting #5, 22.11.2013) 于 Scala: 于仂亟 亳亰 亰舒仂 (ScalaNsk meeting #5, 22.11.2013)
于 Scala: 于仂亟 亳亰 亰舒仂 (ScalaNsk meeting #5, 22.11.2013)
ScalaNsk
仂亞亢亠仆亳亠 于 Dart
仂亞亢亠仆亳亠 于 Dart仂亞亢亠仆亳亠 于 Dart
仂亞亢亠仆亳亠 于 Dart
Sergey Penkovsky
java 8
java 8java 8
java 8
Unguryan Vitaliy
舒亰仂于亠 仂仗亠舒仂 Java
舒亰仂于亠 仂仗亠舒仂 Java舒亰仂于亠 仂仗亠舒仂 Java
舒亰仂于亠 仂仗亠舒仂 Java
metaform
Regular Expressions
Regular ExpressionsRegular Expressions
Regular Expressions
Alexey Bovanenko
C++ 舒亰仂于亶. 舒仆亳亠 02.
C++ 舒亰仂于亶. 舒仆亳亠 02.C++ 舒亰仂于亶. 舒仆亳亠 02.
C++ 舒亰仂于亶. 舒仆亳亠 02.
Igor Shkulipa
亠仍亠从亳 于 java
亠仍亠从亳 于 java亠仍亠从亳 于 java
亠仍亠从亳 于 java
Unguryan Vitaliy
仍亞仂亳仄 仗仂亳从舒 亳 仂亳仂于从亳
仍亞仂亳仄  仗仂亳从舒 亳 仂亳仂于从亳仍亞仂亳仄  仗仂亳从舒 亳 仂亳仂于从亳
仍亞仂亳仄 仗仂亳从舒 亳 仂亳仂于从亳
Unguryan Vitaliy
舒于亠仍 舒于仍仂于 - Scala 亟仍 Java 仗仂亞舒仄仄亳仂于 (JavaDay Nsk 28.11.2013)
舒于亠仍 舒于仍仂于 - Scala 亟仍 Java 仗仂亞舒仄仄亳仂于 (JavaDay Nsk 28.11.2013)舒于亠仍 舒于仍仂于 - Scala 亟仍 Java 仗仂亞舒仄仄亳仂于 (JavaDay Nsk 28.11.2013)
舒于亠仍 舒于仍仂于 - Scala 亟仍 Java 仗仂亞舒仄仄亳仂于 (JavaDay Nsk 28.11.2013)
ScalaNsk
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
Dmitry Stropalov
Java. C亳亠仄 亳仍仆亳, 弍亳仂于亠 仂仗亠舒亳亳
Java. C亳亠仄 亳仍仆亳, 弍亳仂于亠 仂仗亠舒亳亳Java. C亳亠仄 亳仍仆亳, 弍亳仂于亠 仂仗亠舒亳亳
Java. C亳亠仄 亳仍仆亳, 弍亳仂于亠 仂仗亠舒亳亳
Unguryan Vitaliy
从仍ム亠仆亳 亳 仂亳弍从亳
从仍ム亠仆亳 亳 仂亳弍从亳从仍ム亠仆亳 亳 仂亳弍从亳
从仍ム亠仆亳 亳 仂亳弍从亳
Unguryan Vitaliy
仍舒于舒1: 弍亰仂 亠仆仂仍仂亞亳亳 Java
仍舒于舒1: 弍亰仂 亠仆仂仍仂亞亳亳 Java仍舒于舒1: 弍亰仂 亠仆仂仍仂亞亳亳 Java
仍舒于舒1: 弍亰仂 亠仆仂仍仂亞亳亳 Java
metaform
Java. Generic - 舒弍仍仂仆仆亠 亳仗.
Java.  Generic - 舒弍仍仂仆仆亠 亳仗.Java.  Generic - 舒弍仍仂仆仆亠 亳仗.
Java. Generic - 舒弍仍仂仆仆亠 亳仗.
Unguryan Vitaliy
于 Scala: 于仂亟 亳亰 亰舒仂 (ScalaNsk meeting #5, 22.11.2013)
 于 Scala: 于仂亟 亳亰 亰舒仂 (ScalaNsk meeting #5, 22.11.2013) 于 Scala: 于仂亟 亳亰 亰舒仂 (ScalaNsk meeting #5, 22.11.2013)
于 Scala: 于仂亟 亳亰 亰舒仂 (ScalaNsk meeting #5, 22.11.2013)
ScalaNsk
仂亞亢亠仆亳亠 于 Dart
仂亞亢亠仆亳亠 于 Dart仂亞亢亠仆亳亠 于 Dart
仂亞亢亠仆亳亠 于 Dart
Sergey Penkovsky
舒亰仂于亠 仂仗亠舒仂 Java
舒亰仂于亠 仂仗亠舒仂 Java舒亰仂于亠 仂仗亠舒仂 Java
舒亰仂于亠 仂仗亠舒仂 Java
metaform
C++ 舒亰仂于亶. 舒仆亳亠 02.
C++ 舒亰仂于亶. 舒仆亳亠 02.C++ 舒亰仂于亶. 舒仆亳亠 02.
C++ 舒亰仂于亶. 舒仆亳亠 02.
Igor Shkulipa
亠仍亠从亳 于 java
亠仍亠从亳 于 java亠仍亠从亳 于 java
亠仍亠从亳 于 java
Unguryan Vitaliy
仍亞仂亳仄 仗仂亳从舒 亳 仂亳仂于从亳
仍亞仂亳仄  仗仂亳从舒 亳 仂亳仂于从亳仍亞仂亳仄  仗仂亳从舒 亳 仂亳仂于从亳
仍亞仂亳仄 仗仂亳从舒 亳 仂亳仂于从亳
Unguryan Vitaliy
舒于亠仍 舒于仍仂于 - Scala 亟仍 Java 仗仂亞舒仄仄亳仂于 (JavaDay Nsk 28.11.2013)
舒于亠仍 舒于仍仂于 - Scala 亟仍 Java 仗仂亞舒仄仄亳仂于 (JavaDay Nsk 28.11.2013)舒于亠仍 舒于仍仂于 - Scala 亟仍 Java 仗仂亞舒仄仄亳仂于 (JavaDay Nsk 28.11.2013)
舒于亠仍 舒于仍仂于 - Scala 亟仍 Java 仗仂亞舒仄仄亳仂于 (JavaDay Nsk 28.11.2013)
ScalaNsk
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
Dmitry Stropalov
Java. C亳亠仄 亳仍仆亳, 弍亳仂于亠 仂仗亠舒亳亳
Java. C亳亠仄 亳仍仆亳, 弍亳仂于亠 仂仗亠舒亳亳Java. C亳亠仄 亳仍仆亳, 弍亳仂于亠 仂仗亠舒亳亳
Java. C亳亠仄 亳仍仆亳, 弍亳仂于亠 仂仗亠舒亳亳
Unguryan Vitaliy
从仍ム亠仆亳 亳 仂亳弍从亳
从仍ム亠仆亳 亳 仂亳弍从亳从仍ム亠仆亳 亳 仂亳弍从亳
从仍ム亠仆亳 亳 仂亳弍从亳
Unguryan Vitaliy

Similar to OOP in JavaScript - Presentation by Eugene Kalosha (20)

Javascript 1
Javascript 1Javascript 1
Javascript 1
Andrey Dolinin
Underscore js
Underscore jsUnderscore js
Underscore js
Olya Nosova
Step 3.2
Step 3.2Step 3.2
Step 3.2
DmitryTrushkin
弍亰仂 Ruby
弍亰仂 Ruby弍亰仂 Ruby
弍亰仂 Ruby
Digital-舒亞亠仆于仂 亶从
舒亠仄 仆亢仆舒 Scala?
舒亠仄 仆亢仆舒 Scala?舒亠仄 仆亢仆舒 Scala?
舒亠仄 仆亢仆舒 Scala?
Vasil Remeniuk
JavaScript. Basics (in russian)
JavaScript. Basics (in russian)JavaScript. Basics (in russian)
JavaScript. Basics (in russian)
Mikhail Davydov
Msu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing JavaMsu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing Java
olegol
Module 5 1
Module 5 1Module 5 1
Module 5 1
kairbekov
弌舒亳亠从亳亶 舒仆舒仍亳亰 亳 亠亞仍仆亠 于舒亢亠仆亳
弌舒亳亠从亳亶 舒仆舒仍亳亰 亳 亠亞仍仆亠 于舒亢亠仆亳弌舒亳亠从亳亶 舒仆舒仍亳亰 亳 亠亞仍仆亠 于舒亢亠仆亳
弌舒亳亠从亳亶 舒仆舒仍亳亰 亳 亠亞仍仆亠 于舒亢亠仆亳
Tatyanazaxarova
Pavel Rumantsev - Java Script
Pavel Rumantsev - Java ScriptPavel Rumantsev - Java Script
Pavel Rumantsev - Java Script
beloslab
于于亠亟亠仆亳亠 于 Javascript
于于亠亟亠仆亳亠 于 Javascript于于亠亟亠仆亳亠 于 Javascript
于于亠亟亠仆亳亠 于 Javascript
inqubick
丐亳仗 亟舒仆仆
丐亳仗 亟舒仆仆丐亳仗 亟舒仆仆
丐亳仗 亟舒仆仆
MonsterXX
Lec 4
Lec 4Lec 4
Lec 4
Alexander Rusin
亊亰从 仗仂亞舒仄仄亳仂于舒仆亳 Scala / 仍舒亟亳仄亳 丕仗亠仆从亳亶 (TCS Bank)
亊亰从 仗仂亞舒仄仄亳仂于舒仆亳 Scala / 仍舒亟亳仄亳 丕仗亠仆从亳亶 (TCS Bank)亊亰从 仗仂亞舒仄仄亳仂于舒仆亳 Scala / 仍舒亟亳仄亳 丕仗亠仆从亳亶 (TCS Bank)
亊亰从 仗仂亞舒仄仄亳仂于舒仆亳 Scala / 仍舒亟亳仄亳 丕仗亠仆从亳亶 (TCS Bank)
Ontico
Kotlin first Kotlin first Kotlin firstKotlin first
Kotlin first Kotlin first Kotlin firstKotlin firstKotlin first Kotlin first Kotlin firstKotlin first
Kotlin first Kotlin first Kotlin firstKotlin first
pavelwordp1
Groovy jug-moscow-part 1
Groovy jug-moscow-part 1Groovy jug-moscow-part 1
Groovy jug-moscow-part 1
Evgeny Borisov
Underscore js
Underscore jsUnderscore js
Underscore js
Olya Nosova
舒亠仄 仆亢仆舒 Scala?
舒亠仄 仆亢仆舒 Scala?舒亠仄 仆亢仆舒 Scala?
舒亠仄 仆亢仆舒 Scala?
Vasil Remeniuk
JavaScript. Basics (in russian)
JavaScript. Basics (in russian)JavaScript. Basics (in russian)
JavaScript. Basics (in russian)
Mikhail Davydov
Msu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing JavaMsu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing Java
olegol
Module 5 1
Module 5 1Module 5 1
Module 5 1
kairbekov
弌舒亳亠从亳亶 舒仆舒仍亳亰 亳 亠亞仍仆亠 于舒亢亠仆亳
弌舒亳亠从亳亶 舒仆舒仍亳亰 亳 亠亞仍仆亠 于舒亢亠仆亳弌舒亳亠从亳亶 舒仆舒仍亳亰 亳 亠亞仍仆亠 于舒亢亠仆亳
弌舒亳亠从亳亶 舒仆舒仍亳亰 亳 亠亞仍仆亠 于舒亢亠仆亳
Tatyanazaxarova
Pavel Rumantsev - Java Script
Pavel Rumantsev - Java ScriptPavel Rumantsev - Java Script
Pavel Rumantsev - Java Script
beloslab
于于亠亟亠仆亳亠 于 Javascript
于于亠亟亠仆亳亠 于 Javascript于于亠亟亠仆亳亠 于 Javascript
于于亠亟亠仆亳亠 于 Javascript
inqubick
丐亳仗 亟舒仆仆
丐亳仗 亟舒仆仆丐亳仗 亟舒仆仆
丐亳仗 亟舒仆仆
MonsterXX
亊亰从 仗仂亞舒仄仄亳仂于舒仆亳 Scala / 仍舒亟亳仄亳 丕仗亠仆从亳亶 (TCS Bank)
亊亰从 仗仂亞舒仄仄亳仂于舒仆亳 Scala / 仍舒亟亳仄亳 丕仗亠仆从亳亶 (TCS Bank)亊亰从 仗仂亞舒仄仄亳仂于舒仆亳 Scala / 仍舒亟亳仄亳 丕仗亠仆从亳亶 (TCS Bank)
亊亰从 仗仂亞舒仄仄亳仂于舒仆亳 Scala / 仍舒亟亳仄亳 丕仗亠仆从亳亶 (TCS Bank)
Ontico
Kotlin first Kotlin first Kotlin firstKotlin first
Kotlin first Kotlin first Kotlin firstKotlin firstKotlin first Kotlin first Kotlin firstKotlin first
Kotlin first Kotlin first Kotlin firstKotlin first
pavelwordp1
Groovy jug-moscow-part 1
Groovy jug-moscow-part 1Groovy jug-moscow-part 1
Groovy jug-moscow-part 1
Evgeny Borisov

OOP in JavaScript - Presentation by Eugene Kalosha

  • 1. JavaScript OOP. How is it possible?
  • 2. Table of contents Introduction 1. JavaScript data types 1.1. String 1.2. Number 1.3. Boolean 1.4. Object 1.5. Array 1.6. null 1.7. undefined 1.8. 亠仂弍舒亰仂于舒仆亳亠 亳仗仂于
  • 3. Table of contents 2. OOP in JavaScript 2.1. Object 2.1.1. 弌于仂亶于舒 仂弍亠从仂于 2.1.2. 亠亠 亳 亠亠 2.1.3. 亠仂亟 仂弍亠从舒 2.1.4. 丼仂 舒从仂亠 this? 舒亞亳 于 亟亠亶于亳亳 2.1.5. 亳亠舒仍仆亶 亳仆舒从亳 仂仗亠亟亠仍亠仆亳 仂弍亠从舒 2.1.6. 舒仍亠亟仂于舒仆亳亠 仂弍亠从仂于 2.2. Class 2.2.1. 仍舒. 舒仍亠亟仂于舒仆亳亠 2.2.2. 仍舒 亳 仗仂仂亳仗. 舒仍亠亟仂于舒仆亳亠
  • 4. Introduction 亰仆舒舒仍仆仂 JavaScript 仗仂亰亳亳仂仆亳亠 从舒从 仂弍亠从仆仂- 仂亳亠仆亳仂于舒仆仆亶 磶从. 亅仂 于亠亢亟亠仆亳亠 于亰于舒亠 仗仂 亠亟亳 舒亰舒弍仂亳从仂于. 仆仂于仆亠 从仂仆舒亞仄亠仆: 亟亠 从仍舒? 亟亠 仆舒仍亠亟仂于舒仆亳亠? 于仂仂弍亠 WTF?
  • 5. 仆亠仆亠 JavaScript (ECMAScript) 于亞仍磲亳 从舒从 Java, 仆仂 舒从亳亠从亳 仂 仂于亠亠仆仆仂 亟亞仂亶 磶从, 仗仂仂亳仗仂仄 从仂仂仂亞仂 磦仍磳 磶从 Self (http://selflanguage.org/). 亅仂 仂弍仂亠仍于仂 亟亠仍舒亠 磶从 仂亠仆 仗仂仄 亳 舒于仆亳亠仍仆仂 仄仂仆仄 弍仍舒亞仂亟舒 于仂亳仄 仂仂弍亠仆仆仂礆. 亟仆舒 亳亰 舒从亳 仂仂弍亠仆仆仂亠亶 仂 亠舒仍亳亰舒亳 仗仂仂亳仗仆仂亞仂 仆舒仍亠亟仂于舒仆亳. 亅仂 仗仂仂亶 从仂仆亠仗 磦仍磳 亞亳弍从亳仄 亳 仄仂仆仄. 仆 仗仂亰于仂仍磳 亟亠仍舒 仆舒仍亠亟仂于舒仆亳亠 亳 仗仂于亠亟亠仆亳亠 仆仂礆亳 仗亠于仂亞仂 从仍舒舒, 舒从亢亠 从舒从 亳 仆从亳亳 磦仍ム 仂弍亠从舒仄亳 仗亠于仂亞仂 从仍舒舒 于 仆从亳仂仆舒仍仆 磶从舒 (于从仍ム舒 JavaScript).
  • 6. 1. JavaScript data types JavaScript 亠 亳 仂仆仂于仆 亳仗舒 亟舒仆仆, 亟于舒 仂舒于仆 亳仗舒 亟舒仆仆 亳 亟于舒 仗亠亳舒仍仆 亳仗舒 亟舒仆仆. 仂亞仂 7 亳仗仂于 亟舒仆仆. 仂仆仂? 仂仆仂! 仆仂于仆亠 亳仗 亟舒仆仆 (弍舒亰仂于亠): String Number Boolean
  • 7. 弌仂舒于仆亠 亳仗 亟舒仆仆 (仍仂仆亠): Object Array 弌仗亠亳舒仍仆亠 亳仗 亟舒仆仆: null Undefined 亞亟亠 亢亠 从仍舒? 亳舒仍从舒
  • 8. 1.1 String 弌仂从仂于仂亠 亰仆舒亠仆亳亠 仗亠亟舒于仍磳 仂弍仂亶 亠仗仂从, 仂仂 亳亰 仆仍 亳仍亳 弍仂仍亠亠 亰仆舒从仂于 Unicode (弍从于, 亳 亳仍亳 亰仆舒从仂于 仗仆从舒亳亳). 弌仂从仂于亶 亳仗 亟舒仆仆 亳仗仂仍亰亠 亟仍 仗亠亟舒于仍亠仆亳 亠从舒 于 JavaScript. 仍 于从仍ム亠仆亳 于 从亳仗 仂从仂于 仍亳亠舒仍仂于, 亳 仆亠仂弍仂亟亳仄仂 亰舒从仍ム亳 于 仂亟亳仆舒仆亠 亳仍亳 亟于仂亶仆亠 从舒于从亳. 仂从舒, 亰舒从仍ム亠仆仆 于 仂亟亳仆舒仆亠 从舒于从亳, 仄仂亢仆仂 亳仗仂仍亰仂于舒 亟于仂亶仆亠 从舒于从亳, 舒 于 仂从舒, 亰舒从仍ム亠仆仆 于 亟于仂亶仆亠 从舒于从亳, 仄仂亢仆仂 亳仗仂仍亰仂于舒 仂亟亳仆舒仆亠 从舒于从亳. 亳亢亠 仗亠亟舒于仍亠仆 仗亳仄亠 仂从: "String!" '"String!" String.' "12345" 's'
  • 9. 弍舒亳亠 于仆亳仄舒仆亳亠, 仂 JavaScript 仆亠 亳仄亠亠 亳仗舒 亟仍 仗亠亟舒于仍亠仆亳 仂亟亳仆仂仆仂亞仂 亳仄于仂仍舒. 仍 仗亠亟舒于仍亠仆亳 仂亟亠仍仆仂亞仂 亳仄于仂仍舒 于 JavaScript 亳仗仂仍亰亠 仂从舒, 从仂仂舒 仂仂亳 仂仍从仂 亳亰 仂亟仆仂亞仂 亳仄于仂仍舒. 弌仂从舒, 仆亠 仂亟亠亢舒舒 亰仆舒从仂于 ("") 仆舒亰于舒亠 仗仂亶 仂从仂亶 (亳仍亳 仂从仂亶 仆仍亠于仂亶 亟仍亳仆). 仍 仗亠亟舒于仍亠仆亳 亰仆舒从仂于, 从仂仂亠 仆亠于仂亰仄仂亢仆仂 于于亠亳 弍亠亰 仗亠仂弍舒亰仂于舒仆亳, 于 JavaScript 仗亠亟仄仂亠仆 escape- 仗仂仍亠亟仂于舒亠仍仆仂亳, 于从仍ム舒亠仄亠 于 仂从亳. 舒仗亳仄亠, t 亰舒亟舒亠 亳仄于仂仍 舒弍仍亳亳.
  • 10. 1.2 Number JavaScript, 仆亠 舒亰仍亳亳 仄亠亢亟 亠仍仄 亳仍仂仄 亳 亳仍仂仄 仗仍舒于舒ム亠亶 亰舒仗仂亶; 亳仍仂 JavaScript 仄仂亢亠 弍 亳 亠仄, 亳 亠仄 (仗仂 亳, JavaScript 仗亠亟舒于仍磳 于亠 亳仍舒 于 从舒亠于亠 亰仆舒亠仆亳 仗仍舒于舒ム亠亶 亰舒仗仂亶). 丶亠仍仂亳仍亠仆仆亠 亰仆舒亠仆亳 仄仂亞 弍 仗仂仍仂亢亳亠仍仆仄亳 亠仍仄亳 亳仍舒仄亳, 仂亳舒亠仍仆仄 亠仍仄亳 亳仍舒仄亳 亳 0. 从舒亠于亠 仂仆仂于 仗亠亟舒于仍亠仆亳 亳 亳亠仍 仄仂亢仆仂 亳仗仂仍亰仂于舒 10 (亟亠亳仆仂亠 仗亠亟舒于仍亠仆亳亠), 16 (亠仆舒亟舒亠亳仆仂亠 仗亠亟舒于仍亠仆亳亠) 亳 8 (于仂仄亠亳仆仂亠 仗亠亟舒于仍亠仆亳亠). 仂仍亳仆于仂 亳亠仍 于 JavaScript 亰舒仗亳于舒ム 于 亟亠亳仆仂仄 仗亠亟舒于仍亠仆亳亳. 亠 亠仆舒亟舒亠亳仆亠 ("hex") 亠仍亠 亳仍舒 仂亟亠亢舒 仗亠亳从 "0x" (仆仂仍 亳 x|X). 亳 仂舒于 仄仂亞 于仂亟亳 仂仍从仂 亳 仂 0 亟仂 9 亳 弍从于 仂 A 亟仂 F (于 于亠仆亠仄 亳仍亳 仆亳亢仆亠仄 亠亞亳亠). 从于 A-F 亳仗仂仍亰ム 亟仍 仗亠亟舒于仍亠仆亳 亟亠亳仆 亳亠仍 仂 10 亟仂 15. 丐仂 亠 亠仆舒亟舒亠亳仆仂亠 亳仍仂 0xF 从于亳于舒仍亠仆仆仂 亟亠亳仆仂仄 亳仍 15, 舒 0x10 从于亳于舒仍亠仆仆仂 亳仍 16. 亠 于仂仄亠亳仆亠 亠仍亠 亳仍舒 仂亟亠亢舒 仗亠亳从 "0" (仆仂仍). 亳 仂舒于 仄仂亞 于仂亟亳 仂仍从仂 亳 仂 0 亟仂 7. 丼亳仍仂, 从仂仂仂亠 仆舒亳仆舒亠 亳 "0" 亳 仂亟亠亢亳 亳 "8" 亳 (亳仍亳) "9", 亳仆亠仗亠亳亠 从舒从 亟亠亳仆仂亠.
  • 11. 仂仄亠亳仆亠 亳 亠仆舒亟舒亠亳仆亠 亳仍舒 仄仂亞 弍 仂亳舒亠仍仆仄亳, 仂亟仆舒从仂 仂仆亳 仆亠 仄仂亞 仂亟亠亢舒 亟仂弍仆 舒 亳 亳 仆亠于仂亰仄仂亢仆仂 亰舒仗亳舒 于 仆舒仆仂亶 (从仗仂仆亠仆亳舒仍仆仂亶) 仆仂舒亳亳. 仂仄亠 仂亞仂, JavaScript 仂亟亠亢亳 亳仍舒 仂 仍亠亟ム亳仄亳 仗亠亳舒仍仆仄亳 亰仆舒亠仆亳礆亳: NaN (仆亠 亳仍仂). 仗仂仍亰亠 仗亳 于仗仂仍仆亠仆亳亳 仄舒亠仄舒亳亠从仂亶 仂仗亠舒亳亳 仆舒亟 仆亠亟仂仗亳仄仄亳 亟舒仆仆仄亳, 舒从亳仄亳 从舒从 仂从亳 亳仍亳 仆亠仂仗亠亟亠仍亠仆仆仂亠 亰仆舒亠仆亳亠 仂仍仂亢亳亠仍仆舒 弍亠从仂仆亠仆仂. 仗仂仍亰亠, 亠仍亳 仗仂仍仂亢亳亠仍仆仂亠 亳仍仂 仍亳从仂仄 于亠仍亳从仂 亳 仆亠 仄仂亢亠 弍 仗亠亟舒于仍亠仆仂 于 JavaScript 亳舒亠仍仆舒 弍亠从仂仆亠仆仂. 仗仂仍亰亠, 亠仍亳 仂亳舒亠仍仆仂亠 亳仍仂 仍亳从仂仄 于亠仍亳从仂 亳 仆亠 仄仂亢亠 弍 仗亠亟舒于仍亠仆仂 于 JavaScript 仂仍仂亢亳亠仍仆亶 亳 仂亳舒亠仍仆亶 0. JavaScript 舒亰仍亳舒亠 仗仂仍仂亢亳亠仍仆亶 亳 仂亳舒亠仍仆亶 仆仂仍.
  • 12. 1.3 Boolean 仂 于亠仄 从舒从 仂从仂于亠 亳 亳仍仂于亠 亳仗 亟舒仆仆 仄仂亞 仗亳仆亳仄舒 仗舒从亳亠从仂亠 仆亠仂亞舒仆亳亠仆仆仂亠 亳仍仂 舒亰仍亳仆 亰仆舒亠仆亳亶, 仍仂亞亳亠从亳亶 亳仗 亟舒仆仆 仄仂亢亠 仗亳仆亳仄舒 仂仍从仂 亟于舒 亰仆舒亠仆亳. 亅仂 仍亳亠舒仍 true 亳 false. 仂亞亳亠从仂亠 亰仆舒亠仆亳亠 磦仍磳 亰仆舒亠仆亳亠仄 亳亳仆仆仂亳: 仂仆仂 仂仗亠亟亠仍磳, 磦仍磳 仍亳 仍仂于亳亠 亳亳仆仆仄 亳仍亳 仆亠. 亠亰仍舒 舒于仆亠仆亳 于 从亳仗舒 于亠亞亟舒 弍亟亠 亳仄亠 亳仗 仍仂亞亳亠从仂亞仂 亰仆舒亠仆亳. 亳仄亠: (x == 124)
  • 13. 1.4 Object 弍亠从 JavaScript 仗亠亟舒于仍ム 仂弍仂亶 从仂仍仍亠从亳亳 于仂亶于 亳 仄亠仂亟仂于 (仆舒仍仂亞 Map 于 Java). 亠仂亟仂仄 仆舒亰于舒亠 仆从亳, 磦仍ム舒 仍亠仆仂仄 仂弍亠从舒. 弌于仂亶于仂 仗亠亟舒于仍磳 仂弍仂亶 亰仆舒亠仆亳亠 亳仍亳 仆舒弍仂 亰仆舒亠仆亳亶 (于 于亳亟亠 仄舒亳于舒 亳仍亳 仂弍亠从舒), 从仂仂亶 磦仍磳 仍亠仆仂仄 仂弍亠从舒. JavaScript 仗仂亟亟亠亢亳于舒亠 亠亠 亳仗舒 仂弍亠从仂于: 于仂亠仆仆亠 仂弍亠从, 仂亰亟舒于舒亠仄亠 仂弍亠从, 仗亠亟仂舒于仍磳仄亠 仂仆仂于仆仄 亰仍仂仄 仂弍亠从 (仆舒仗亳仄亠, window 亳 document 于 弍舒亰亠亠) 亳 仂弍亠从 ActiveX. 亠 仂弍亠从 于 JavaScript 仗仂亟亟亠亢亳于舒ム 于仂亶于舒 亳 仄亠仂亟 "expando", 舒 舒从亢亠 于仂亶于舒, 从仂仂亠 仄仂亞 弍 亟仂弍舒于仍亠仆 亳 亟舒仍亠仆 于仂 于亠仄 于仗仂仍仆亠仆亳. 亅亳 于仂亶于舒 亳 仄亠仂亟 仄仂亞 亳仄亠 仍ミ英亠 亳仄亠仆舒, 于从仍ム舒 亳仍舒. 仍亳 亳仄 于仂亶于舒 亳仍亳 仄亠仂亟 磦仍磳 仗仂仄 亳亟亠仆亳亳从舒仂仂仄, 仂 仂仆仂 仄仂亢亠 弍 从舒亰舒仆仂 亠亠亰 仂从 仗仂仍亠 亳仄亠仆亳 仄亠仂亟舒, 仆舒仗亳仄亠:
  • 14. var myObj = new Object(); myObj.name = "Fred"; myObj.age = 42; myObj.getAge = function () { return this.age; }; document.write(myObj.name); document.write("<br/>"); document.write(myObj.age); document.write("<br/>"); document.write(myObj.getAge()); // Output: // Fred // 42 // 42 仂亢仆仂 仂亰仆舒从仂仄亳 亳仄 于 仗亳仄亠亠 example-001.html
  • 15. 仍亳 亳仄 于仂亶于舒 亳仍亳 仄亠仂亟舒 仆亠 磦仍磳 仗仂仄 亳亟亠仆亳亳从舒仂仂仄 亳仍亳 仆亠亳亰于亠仆仂 于 仄仂仄亠仆 仆舒仗亳舒仆亳 从亳仗舒, 仂 仄仂亢仆仂 亳仗仂仍亰仂于舒 于舒亢亠仆亳亠 于 从于舒亟舒仆 从仂弍从舒 亟仍 仂弍仂亰仆舒亠仆亳 于仂亶于舒. 亠亠亟 亟仂弍舒于仍亠仆亳亠仄 从 仂弍亠从 亳仄亠仆舒 于亠 于仂亶于 "expando" 于 JavaScript 仗亠仂弍舒亰ム 于 仂从亳. var myObj = new Object(); // Add two expando properties that cannot be written in the // object.property syntax. // The first contains invalid characters (spaces), so must be // written inside square brackets. myObj["not a valid identifier"] = "This is the property value"; // The second expando name is a number, so it also must // be placed inside square brackets myObj[100] = "100";
  • 16. 仂仍亳 亟仂仗 从 舒从亳仄 于仂亶于舒仄 仄仂亢仆仂 仂仍从仂 亳仗仂仍亰 亳 仂从仂于亠 亰仆舒亠仆亳 亳仍亳 仂弍仂亟 仗仂 for each. 仍 仂亰亟舒仆亳 仂弍亠从仂于 仄仂亢仆仂 亳仗仂仍亰仂于舒 舒从亢亠, 舒从 仆舒亰于舒亠仄 JavaScript Object Notation (JSON). 舒仗亳仄亠: var pasta = {grain: "wheat", width: 0.5, shape: "round"};
  • 17. 1.5 Array JavaScript 仂弍亠从 亳 仄舒亳于 仂弍舒弍舒于舒ム 仗舒从亳亠从亳 仂亟亳仆舒从仂于仂, 仗仂从仂仍从 仄舒亳于 仂 仗亠亳舒仍仆亶 亳仗 仂弍亠从舒. 仆亳 仂弍舒 仄仂亞 仂亟亠亢舒 于仂亶于舒 亳 仄亠仂亟. 仂仍亳亳亠 仂 仂弍亠从仂于, 仄舒亳于 亳仄亠ム 于仂亶于仂 length. 亳 仗亳于仂亠仆亳亳 亰仆舒亠仆亳 从 仍亠仄亠仆 仄舒亳于舒, 亳仆亟亠从 从仂仂仂亞仂 弍仂仍亠 亟仍亳仆 (仆舒仗亳仄亠, myArray[100] = "hello"), 于仂亶于仂 length 舒于仂仄舒亳亠从亳 于亠仍亳亳于舒亠 亟仂 仆仂于仂亶 亟仍亳仆. 仆舒仍仂亞亳仆仂, 仗亳 仄亠仆亠仆亳亳 亰仆舒亠仆亳 于仂亶于舒 length, 仍ミ頴笑 仍亠仄亠仆 亳仆亟亠从仂仄 亰舒 仗亠亟亠仍舒仄亳 亟仍亳仆 仄舒亳于舒 亟舒仍磳.
  • 18. // An array with three elements var myArray = new Array(3); // Add some data myArray[0] = "Hello"; myArray[1] = 42; myArray[2] = new Date(2000, 1, 1); document.write("original length is: " + myArray.length); document.write("<br/>"); // Add some expand properties myArray.expando = "JavaScript!"; myArray["another Expando"] = "Windows"; // This will still display 3, since the two expando properties // don't affect the length. document.write("new length is : " + myArray.length); // Output: // original length is: 3 // new length is : 3
  • 19. 1.6 null 丐亳仗 亟舒仆仆 null 亳仄亠亠 仂仍从仂 仂亟仆仂 亰仆舒亠仆亳亠 于 JavaScript: 亰仆舒亠仆亳亠 null. 仍ム亠于仂亠 仍仂于仂 null 仆亠于仂亰仄仂亢仆仂 亳仗仂仍亰仂于舒 于 从舒亠于亠 亳仄亠仆亳 仆从亳亳 亳仍亳 仗亠亠仄亠仆仆仂亶. 亠亠仄亠仆仆舒, 从仂仂舒 仂亟亠亢亳 null, 仆亠 仂亟亠亢亳 亟仂仗亳仄 Number, String, Boolean, Array 亳仍亳 Object. 仂亢仆仂 亠亠 仂亟亠亢亳仄仂亠 仗亠亠仄亠仆仆仂亶 (仆亠 亟舒仍 仗亠亠仄亠仆仆), 仗亳于舒亳于舒 亠亶 亰仆舒亠仆亳亠 null. 弍舒亳亠 于仆亳仄舒仆亳亠, 仂 于 JavaScript 亰仆舒亠仆亳亠 null 仆亠 仂 亢亠 舒仄仂亠, 仂 0 (从舒从 于 C 亳 C++). 仂仄亠 仂亞仂, 仂仗亠舒仂 typeof 于 JavaScript 仂仗亠亟亠仍磳 亰仆舒亠仆亳 null 从舒从 亰仆舒亠仆亳 亳仗舒 Object, 舒 仆亠 亳仗舒 null. 丐舒从仂亠 仗仂于亠亟亠仆亳亠, 从仂仂仂亠 仄仂亢亠 亰舒仗舒 舒亰舒弍仂亳从仂于, 亳仗仂仍亰亠 于 亠仍 仂弍舒仆仂亶 仂于仄亠亳仄仂亳.
  • 20. 1.7 undefined 仆舒亠仆亳亠 undefined 于仂亰于舒舒亠 仗亳 亳仗仂仍亰仂于舒仆亳亳 于仂亶于舒 仂弍亠从舒, 从仂仂仂亠 仆亠 亠于亠, 亳仍亳 仗亠亠仄亠仆仆仂亶, 从仂仂舒 弍仍舒 仂弍磦仍亠仆舒, 仆仂 舒从 亳 仆亠 仗仂仍亳仍舒 亰仆舒亠仆亳. 仂亢仆仂 仗仂于亠亳, 亠于亠 仍亳 仗亠亠仄亠仆仆舒, 舒于仆亳于舒 亠亠 undefined, 仂亟仆舒从仂 仄仂亢仆仂 仗仂于亠亳, 磦仍磳 仍亳 亠亠 亳仗 undefined, 舒于仆亳于舒 亳仗 仗亠亠仄亠仆仆仂亶 仂 仂从仂亶 "undefined". 仍亠亟ム亠仄 仗亳仄亠亠 仗仂从舒亰舒仆仂, 从舒从 仂仗亠亟亠仍亳, 弍仍舒 仍亳 仂弍磦仍亠仆舒 仗亠亠仄亠仆仆舒 x:
  • 21. var x; // This method works. if (x == undefined) { document.write("comparing x to undefined <br/>"); } // This method works. if (x == null) { document.write("comparing x to null <br/>"); } // This method doesn't work - you must check for the string "undefined". if (typeof(x) == undefined) { document.write("comparing the type of x to undefined <br/>"); } // This method does work. if (typeof(x) == "undefined") { document.write("comparing the type of x to the string 'undefined'"); } // Output: // comparing x to undefined // comparing x to null // comparing the type of x to the string 'undefined' undefined 亟仂于仂仍仆仂 舒仆仆亶 亰于亠亠从, 仍仂于仆仂 亞仂于仂, 仂仆仂 仂弍仂亰仆舒舒亠 仂 "亟舒仆仆 仆亠". 亠 null, 舒 亟舒仆仆 仆亠. 仂仆亳仄舒亶亠 从舒从 仂亳亠.
  • 22. 1.8 亠仂弍舒亰仂于舒仆亳亠 亳仗仂于 亠仂弍舒亰仂于舒仆亳亠 亳仗舒 仄仂亢仆仂 磦仆仄 仂弍舒亰仂仄 亟亠仍舒 亠亠亰 亠亞仂 仆舒亰于舒仆亳亠: var test = Boolean("something") // true
  • 23. 2. OOP in JavaScript. 2.1 Object 弍亠从 于 JavaScript 仂 仗仂仂 从仂仍仍亠从亳 仗舒 从仍ム-亰仆舒亠仆亳亠 (亳 仆亠仄仆仂亞仂 于仆亠仆仆亠亶 仄舒亞亳亳). 亟仆舒从仂, 于 JavaScript 仆亠 从仂仆亠仗亳亳 从仍舒舒. 仗亳仄亠, 仂弍亠从 于仂亶于舒仄亳 {name: Eugene, age: 16} 仆亠 磦仍磳 从亰亠仄仗仍仂仄 从舒从仂亞仂- 仍亳弍仂 从仍舒舒 亳仍亳 从仍舒舒 Object. Object, 亳 Eugene 磦仍ム 从亰亠仄仗仍舒仄亳 舒仄亳 亠弍. 仆亳 仂仗亠亟亠仍ム 仆亠仗仂亠亟于亠仆仆仂 仂弍于亠仆仆仄 仗仂于亠亟亠仆亳亠仄. 丐 仆亠 仍仂 仄亠舒-亟舒仆仆 (.亠. 从仍舒仂于), 从仂仂亠 亞仂于仂亳仍亳 弍 亳仄 仂弍亠从舒仄 从舒从 仆亢仆仂 亠弍 于亠亳. 弌舒亰 于仂亰仆亳从舒亠 于仂仗仂: 束WTF?損, 仂仂弍亠仆仆仂 亠仍亳 于 仗亳仍亳 亳亰 仄亳舒 从仍舒亳亠从亳 仂弍亠从仆仂-仂亳亠仆亳仂于舒仆仆 磶从仂于 (舒从亳 从舒从 Java 亳仍亳 C#). 束仂 亠仍亳 从舒亢亟亶 仂弍亠从 仂弍仍舒亟舒亠 仂弍于亠仆仆仄 仗仂于亠亟亠仆亳亠仄 (于仄亠仂 仂亞仂 仂弍 仆舒仍亠亟仂于舒 亠亞仂 仂 仂弍亠亞仂 从仍舒舒), 仂 亠仍亳 仄亠仆 100 仂弍亠从仂于, 仂 亳仄 仂仂于亠于亠 100 舒亰仆 仄亠仂亟仂于? 舒亰于亠 仂 仆亠 仂仗舒仆仂? 从舒从 仄仆亠 亰仆舒, 仂, 仆舒仗亳仄亠, 仂弍亠从 亟亠亶于亳亠仍仆仂 磦仍磳 Array-亠仄?損
  • 24. 丼仂弍 仂于亠亳 仆舒 于亠 亳 于仂仗仂 仆亠仂弍仂亟亳仄仂 亰舒弍 仂 从仍舒亳亠从仂仄 - 仗仂亟仂亟亠 亳 仆舒舒 于 仆仍. 仆仂 仂亞仂 仂亳. 仂亟亠仍 仗仂仂亳仗仆仂亞仂 仗亳仆仂亳 仆亠从仂仍从仂 仆仂于 亟亳仆舒仄亳仆 亳 从仗亠亳于仆 仗亠亶 亠亠仆亳 舒 仗仂弍仍亠仄. 仆亠亶 舒从亢亠 仗亠亟舒于仍亠仆 仄仂仆亠 仄仂亟亠仍亳 舒亳亠仆亳 亳 仗仂于仂仆仂亞仂 亳仗仂仍亰仂于舒仆亳 从仂亟舒 (舒 仂 亳 亳仆亠亠亠 仍ミ莞黍, 从仂仂亠 亞仂于仂 仂弍 仂弍亠从仆仂-仂亳亠仆亳仂于舒仆仆仂仄 仗仂亞舒仄仄亳仂于舒仆亳亳). 亟仆舒从仂, 舒 仄仂亟亠仍 亟舒 仄亠仆亠 亞舒舒仆亳亶. 舒仗亳仄亠, 仆亠仍亰 仗仂仍舒亞舒, 仂 仂弍亠从 x 于亠亞亟舒 弍亟亠 亳仄亠 仂亟亳仆 亳 仂 亢亠 仆舒弍仂 于仂亶于. 弍亠从 于 JavaScript 仂亰亟舒 仗仂仄仂 仆从亳亳 Object.create. 亅舒 仆从亳 亳亰 仂亟亳亠仍 亳 仂仗亳仂仆舒仍仆仂亞仂 仆舒弍仂舒 于仂亶于 仂亰亟舒 仆仂于 仆仂. 丐舒从 从舒从 仂弍亠从 仂 仗仂仂 仗舒 仆亳从舒仍仆 从仍ム亠亶 仂仂于亠于ム亳仄亳 亰仆舒亠仆亳礆亳 舒从亳亠 仗舒 仆舒亰于舒ム 于仂亶于舒. 仗亳仄亠, 于 仂亳亠 仂仗亳舒 仆亠从仂仍从仂 舒仗亠从仂于 于仂亠亞仂 舒仂亞仂 亟亞舒 (仆舒亰仂于仄 亠亞仂 豫亟亢亳仆, 仂仆 亢亠 Eugene), 舒从亳 从舒从 于仂亰舒, 亳仄 亳 仗仂仍. 舒从, 舒从舒亟亠仄亳亠从亳亶 仗仂仂弍:
  • 25. var Eugene = Object.create(null) 仍舒亳从舒 : var Eugene = new Object() 丕仗仂亠仆仆舒 仆仂舒亳: var Eugene = {}
  • 26. 2.1.1 弌于仂亶于舒 仂弍亠从仂于 弌于仂亶于舒 于 JavaScript 磦仍ム 亟亳仆舒仄亳亠从亳仄亳. 亅仂 仂亰仆舒舒亠, 仂 仄 亳 仄仂亢亠仄 仂亰亟舒于舒 亳仍亳 亟舒仍 于 仍ミ頴笑 于亠仄. 弌于仂亶于舒 仆亳从舒仍仆 于 仂仄 仄仍亠, 仂 从仍ム 于仂亶于舒 于仆亳 仂弍亠从舒 仂仂于亠于亠 仂于仆仂 仂亟仆仂仄 亰仆舒亠仆亳. Javascript 亠 仆从亳, 仗仂亰于仂仍ム舒 仂亰亟舒 于仂亶于仂 仂弍磻舒, 仗舒于亳仍仆仂: Object.defineProperty. 从舒亠于亠 舒亞仄亠仆仂于 仂仆舒 亳仗仂仍亰亠 仂弍亠从, 亳仄 于仂亶于舒 亟仍 仂亰亟舒仆亳 亳 亟亠从亳仗仂, 仂仗亳于舒ム亳亶 亠仄舒仆亳从 于仂亶于舒. 舒仗亳仄亠: Object.defineProperty(Eugene, 'name', { value: 'Eugene' , writable: true , configurable: true , enumerable: true }) 仍亳 仗仂亠仆仆仂: Eugene.name = 'Eugene' Eugene['name'] = 'Eugene'
  • 27. 仍 亟舒仍亠仆亳 于仂亶于舒 亳亰 仂弍亠从舒 于 JavaSCript 仗亠亟仄仂亠仆 仂仗亠舒仂 delete. 仗亳仄亠, 亠仍亳 于 仂亳亠 亟舒仍亳 于仂亶于仂 gender 亳亰 仆舒亠亞仂 仂弍亠从舒 mikhail: delete Eugene [name] // => true Eugene [name] // => undefined
  • 28. 2.1.2 亠亠 亳 亠亠 Getter- 亳 setter- 仂弍仆仂 亳仗仂仍亰ム 于 从仍舒亳亠从亳 仂弍亠从仆仂-仂亳亠仆亳仂于舒仆仆 磶从舒 亟仍 仂弍亠仗亠亠仆亳 亳仆从舒仗仍亳亳. 亠亠 亳 亠亠 于 JavaScript 仗仂亰于仂仍磳 仂弍亠仗亠亳 proxy 亟仍 亰舒仗仂仂于 仆舒 亠仆亳亠 亳 亰舒仗亳 于仂亶于. 仂从仂仍从 仗仂仆亳亠 仂弍仍舒亳 于亳亟亳仄仂亳 于 JavaScript 仆亠, 仂 亳 亰舒亟舒 亳仆从舒仗仍亳亳 亞亠亠/亠亠 仆亠 亠舒ム. 亳仄亠 从仍舒亳亠从仂亞仂 仂仗亠亟亠仍亠仆亳 亠亠舒/弌亠亠舒: Object.defineProperty(Illya, 'name', { configurable: true, enumerable: true, get: function () { return "My Name is: " + this._name; }, set: function (value) { this._name = value; } });
  • 29. 2.1.3 亠仂亟 仂弍亠从舒 仗亳舒仆亳亠 亟亠亶于亳亶, 从仂仂亠 仄仂亢仆仂 亟亠仍舒 仂弍亠从仂仄 亟亠仍舒亠 于 JavaScript 仂亠仆 仗仂仂. 仂亠仄? 舒, 仗仂仂仄, 仂 于 JavaScript 仆亠 舒亰仆亳 仄亠亢亟 仄舒仆亳仗仍亳仂于舒仆亳亠仄 舒从亳仄亳 于亠舒仄亳, 从舒从 Function, Number, Object. 亟亠仍舒亠 仂亟亳仆舒从仂于仂. ミ頴笑 仄亠仂亟 磦仍磳 仗仂仂 于仂亶于仂仄 亠从亠亞仂 仂弍亠从舒 亳仗舒 Function, 从仂仂仂亠 仂亰亟舒亠 亟亳仆舒仄亳亠从亳 亳 仄仂亢亠 弍 亳仗仂仍亰仂于舒仆仂 于 从仂仆亠从亠 仂亞仂 仂弍亠从舒. 亳仄亠: var Eugene = { name: "Eugene" }; Eugene.getName = function () { return this.name; }; Eugene.setName = function (value) { this.name = value; };
  • 30. 2.1.4 丼仂 舒从仂亠 this? 舒亞亳 于 亟亠亶于亳亳 this 仂 仂亟仆舒 亳亰 舒仄 于舒亢仆 仗亠亠仄亠仆仆 于 JavaScript, 仂仆舒 舒仆亳 于 亠弍亠 仍从 仆舒 仂弍亠从, 从仂仂仂仄 仗亳仆舒亟仍亠亢亳 亳仗仂仍仆ム舒 仆从亳. 亅仂 仆亠 仂弍磶舒亠仍仆仂 仂亰仆舒舒亠, 仂 this 于亠亞亟舒 舒于仆仂 仂弍亠从, 于 从仂仂仂仄 仆从亳 舒仆亳. 亠, JavaScript 仆亠 仆舒仂仍从仂 亞仂亳亳亠仆. 个仆从亳亳 磦仍ム generic-舒仄亳. 丐.亠. 于 JavaScript 仗亠亠仄亠仆仆舒 this 仂仗亠亟亠仍磳 亟亳仆舒仄亳亠从 仍从, 从仂仂舒 舒亰亠舒亠 于 仄仂仄亠仆 亳仗仂仍仆亠仆亳 仆从亳亳. 仂亠 亟亳仆舒仄亳亠从仂亞仂 舒亰亠亠仆亳 this 仂弍亠仗亠亳于舒亠 仆亠于亠仂仆仂 仄仂仆亶 仄亠舒仆亳亰仄 亟仍 亟亳仆舒仄亳亰舒亳亳 仂弍亠从仆仂亶 仂亳亠仆亳仂于舒仆仆仂亳 JavaScript 亳 从仂仄仗亠仆亳亠 仂于亳亠 仂亞仂亞仂 仂仂于亠于亳 亰舒亟舒仆仆仄 从舒仄 (.亠. 从仍舒舒仄). 亅仂 仂亰仆舒舒亠, 仂 仄仂亢仆仂 仗亳仄亠仆亳 仆从亳 从 仍ミ頴笑煮 仂弍亠从, 从仂仂亶 仂于亠舒亠 亠弍仂于舒仆亳礆 亰舒仗从舒, 仆亠亰舒于亳亳仄仂 仂 仂亞仂, 从舒从 仂亠仆 仂弍亠从
  • 31. 弌亠于亠 亠亠 舒亰仍亳仆 仗仂仂弍舒 舒亰亠亠仆亳 this 于 仆从亳亳, 亰舒于亳亳亠 仂 仂亞仂, 从舒从 仆从亳 于亰于舒亠: 仆亠仗仂亠亟于亠仆仆仂, 从仂亞亟舒 仆从亳 于亰于舒亠 舒仄舒 仗仂 亠弍亠, 弍亠亰 仂弍亠从仆仂亞仂 从仂仆亠从舒. 舒仗亳仄亠: someFunction1(). 仂仄 仍亠舒亠 this 仂 亞仍仂弍舒仍仆亶 从仂仆亠从 (于 弍舒亰亠亠 仂 仂弍亠从 window) 从舒从 仄亠仂亟, 仆舒仗亳仄亠: Eugene.getName(), 于 舒从仂仄 仍舒亠 this 弍亟亠 仂亢亟亠于亠仆仆仂 仂弍亠从 Eugene. 磦仆仂 仗亳仄亠仆磳. JavaScript 仍ミ頴委 仆从亳 仄仂亢亠 弍 于亰于舒仆舒 于 从仂仆亠从亠 仆亠从仂仂仂亞仂 仂弍亠从舒 亳仗仂仍亰 仄亠仂亟 call 亳仍亳 apply. 舒仄仂亳仄 仗亳仄亠:
  • 32. function getObjectQName(parameter1) { var result = "My Name is: " + this.name; if (parameter1 != null) { result += ", and parameter1 is: " + parameter1; } return result; } getObjectQName.call(Eugene, "PAR-1"); // this === Eugene getObjectQName.call(Illya, "PARAMETER-1"); // this === Illya // Bind example Eugene.illyaNameFnc = getObjectQName.bind(Illya); writeLog(Eugene.illyaNameFnc("PAR-1")); // this === Illya
  • 33. 从舒从 从仂仆从仂. 亅仂 从仂仆亠从 舒仄仂亳仄 仗仂亰亟仆亠亠.
  • 34. 2.1.5 亳亠舒仍仆亶 亳仆舒从亳 仂仗亠亟亠仍亠仆亳 仂弍亠从舒 仂仂亶 仗仂仂弍 仂亰亟舒 仂弍亠从 亰舒从仍ム舒亠 于 亳仗仂仍亰仂于舒仆亳亳 仍亳亠舒仍仆仂亞仂 亳仆舒从亳舒 JavaScript. 亳亠舒仍仆亶 仂弍亠从 仂仗亠亟亠仍磳 仆仂于亶 仂弍亠从, 仂亟亳亠仍 从仂仂仂亞仂 Object.prototype. 亳仄亠 仂亞仂 亳仆舒从亳舒 仗亳于亠亟亠仆 仆亳亢亠: var Eugene = { _name: "Eugene", _age: 18, get name() { return this._name; }, set name(value) { this._name = value; }, getAge: function(){ return this._age; } };
  • 35. 2.1.6 舒仍亠亟仂于舒仆亳亠 仂弍亠从仂于? 舒仍亠亟仂于舒仆亳亠 于 JavaScript 仂亠于仍磳 亠亠亰 从仍仂仆亳仂于舒仆亳亠 仗仂于亠亟亠仆亳 仂弍亠从舒 亳 舒亳亠仆亳亠 亠亞仂 仗亠亳舒仍亳亰亳仂于舒仆仆仄 仗仂于亠亟亠仆亳亠仄. 弍亠从, 仗仂于亠亟亠仆亳亠 从仂仂仂亞仂 从仍仂仆亳ム, 仆舒亰于舒亠 仗仂仂亳仗仂仄. 仂仂亳仗 仂 仂弍仆亶 仂弍亠从, 从仂仂亶 亟亠仍亳 于仂亳仄 仗仂于亠亟亠仆亳亠仄 亟亞亳仄亳 仂弍亠从舒仄亳 于 仂仄 仍舒亠 仂仆 于仗舒亠 于 从舒亠于亠 仂亟亳亠仍. 仂仆亠仗 从仍仂仆亳仂于舒仆亳 仗仂于亠亟亠仆亳 仆亠 仂亰仆舒舒亠, 仂 于 弍亟亠亠 亳仄亠 亟于亠 舒亰仍亳仆亠 从仂仗亳亳 仂亟仆仂亶 亳 仂亶 亢亠 仆从亳亳 亳仍亳 亟舒仆仆. 舒 舒仄仂仄 亟亠仍亠 JavaScript 亠舒仍亳亰亠 仆舒仍亠亟仂于舒仆亳亠 亠亠亰 亟亠仍亠亞亳仂于舒仆亳亠, .亠. 于亠 于仂亶于舒 舒仆 于 仂亟亳亠仍亠, 舒 亟仂仗 从 仆亳仄 舒亳亠仆 亠亠亰 亠弍仆从舒. 舒从 仗仂仄亳仆舒仍仂 舒仆亠亠, 仂亟亳亠仍 (亳仍亳 [[Prototype]]) 仂弍亠从舒 仂仗亠亟亠仍磳 于亰仂于仂仄 Object.create 仗亠于仄 舒亞仄亠仆仂仄, 仍舒ム亳仄 仆舒 仂弍亠从- 仂亟亳亠仍. 舒仄仂亳仄 仗亳仄亠:
  • 36. var Person = { _name: "Unknown", _age: 0, get name() { return this._name; }, set name(value) { this._name = value; }, getLocalName: function(){ return "Person: " + this._name; }, getAge: function(){ return this._age; } }; writeLog(Person.name); writeLog(Person.getAge()); var Eugene = Object.create(Person); Eugene.name = "Eugene"; Eugene._age = 18; writeLog(Eugene.name); writeLog(Eugene.getAge()); writeLog(""); writeLog("Dynamically overloading getLocalName() object method"); writeLog(Eugene.getLocalName()); Eugene.getLocalName = function () { return "From Eugene: " + this._name; }; writeLog(Eugene.getLocalName()); delete Eugene.getLocalName; writeLog(Eugene.getLocalName());
  • 37. JavaScript 亠舒仍亳亰亠 亟亠仍亠亞亳仂于舒仆亳亠 亟仂仗舒 从 于仂亶于舒仄, .亠. 于仂亶于仂 亳亠 亠亠亰 于亠 仂亟亳亠仍亠亶 仂弍亠从舒. 亅舒 亠仗 仂亟亳亠仍亠亶 仂仗亠亟亠仍磳 从仄 仍仂仂仄 于 从舒亢亟仂仄 仂弍亠从亠, 从仂仂亶 仆舒亰于舒亠 [[Prototype]]. 仆亠 仄仂亢亠亠 亳亰仄亠仆亳 亠亞仂 仆亠仗仂亠亟于亠仆仆仂, 亠于亠 仂仍从仂 仂亟亳仆 仗仂仂弍 亰舒亟舒 亠仄 亰仆舒亠仆亳亠 仗亳 仂亰亟舒仆亳亳 仆仂于仂亞仂 仂弍亠从舒. 仂亞亟舒 于仂亶于仂 亰舒仗舒亳于舒亠 亳亰 仂弍亠从舒, 亟于亳亢仂从 仆舒舒仍舒 仗舒亠 仗仂仍亳 于仂亶于仂 亳亰 亠仍亠于仂亞仂 仂弍亠从舒. 仍亳 于仂亶于仂 仆亠 仆舒亶亟亠仆仂, 仂 舒仄舒亳于舒亠 仆亠仗仂亠亟于亠仆仆亶 仂亟亳亠仍 仂弍亠从舒, 亰舒亠仄 仂亟亳亠仍 仂亟亳亠仍 亳 .亟. 亅仂 仂亰仆舒舒亠, 仂 仄 仄仂亢亠仄 亳亰仄亠仆亳 仗仂于亠亟亠仆亳亠 仗仂仂亳仗舒 于 亠亠亟亳仆亠 仗仂亞舒仄仄, 仂 舒于仂仄舒亳亠从亳 亳亰仄亠仆亳 仗仂于亠亟亠仆亳亠 于亠 仂弍亠从仂于, 从仂仂亠 弍仍亳 仂 仆亠亞仂 仆舒仍亠亟仂于舒仆.
  • 38. 2.2 Class. 2.2.1 仍舒 舒从, 舒仄舒 弍仂仍舒 仄舒亞亳. JavaScript 从仍舒 仂 仆从亳亳! WTF? ミ頴委 仆从亳, 从仂仄亠 仆亠从仂仂 于仂亠仆仆, 仄仂亢亠 弍 亳仆亳亳舒仍亳亰亳仂于舒仆舒 从舒从 仂弍亠从. 仍 仂亞仂 亠亠 仆亢仆仂 于亰于舒 亠亠亰 亟亳亠从亳于 new. 舒从: RiaShamans.JSExamples.Person = function (name, age, mass) { this.name = name; this.age = age; this.mass = mass; }; var Eugene = new ("Eugene", 18, 65);
  • 39. 仂 于亠仄 舒弍仂 仆从亳亳, 于亰于舒仆仆仂亶 亟亳亠从亳于仂亶 new, 仆仂于仂仂亰亟舒于舒亠仄亶 仂弍亠从 亟仂仗亠仆 从舒从 this, 舒从 仂 仄仂亢仆仂 仗仂舒于亳 仍ミ英亠 于仂亶于舒. 仍舒 仂弍亠从舒 仂仗亠亟亠仍磳 仆从亳亠亶, 从仂仂舒 亠亞仂 仂亰亟舒仍舒. 仍 仗仂于亠从亳 仗亳仆舒亟仍亠亢仆仂亳 从仍舒 亠 仂仗亠舒仂 instanceof: var Eugene = new RiaShamans.JSExamples.Person("Eugene", 18, 65); writeLog(Eugene instanceof RiaShamans.JSExamples.Person);
  • 40. 2.2.2 仂舒仆于舒 亳仄亠仆 亳 仗舒从亠 仂从仂仍从 从仍舒 亳 仂弍亠从 亠舒仍亳亰ム 于 于亳亟亠 仗亠亠仄亠仆仆 (仗亠亠仄亠仆仆- 仆从亳亶 亳 仗亠亠仄亠仆仆-仂弍亠从仂于), 仂 仗仂舒仆于舒 亳仄亠仆 仄仂亞 弍 亠舒仍亳亰仂于舒仆 于 于亳亟亠 仗仂仍亠亶-仗亠亠仄亠仆仆 弍亠从仂于. 舒仗亳仄亠: if (typeof(RiaShamans) == "undefined") RiaShamans = {}; if (typeof(RiaShamans.JSExamples) == "undefined") RiaShamans.JSExamples = {}; 丐舒从亳仄 仂弍舒亰仂仄 仂亰亟舒仆 仗舒从亠 RiaShamans.JSExamples, 从仂仂亶 仄仂亢亠 亳仗仂仍亰仂于舒 亟仍 仂仗亠亟亠仍亠仆亳 从仍舒仂于 亳仍亳 仂弍亠从仂于. 舒仗亳仄亠:
  • 41. if (typeof(RiaShamans) == "undefined") RiaShamans = {}; if (typeof(RiaShamans.JSExamples) == "undefined") RiaShamans.JSExamples = {}; /** * Class defines Person Entity * * @class {RiaShamans.JSExamples.Person} * @param name * @param age * @param mass * @returns {RiaShamans.JSExamples.Person} */ RiaShamans.JSExamples.Person = function (name, age, mass) { };
  • 42. 2.2.3 仍舒 亳 仗仂仂亳仗. 舒仍亠亟仂于舒仆亳亠 javascript 弍舒亰仂于仂亠 仆舒仍亠亟仂于舒仆亳亠 仂仆仂于舒仆仂 仆亠 仆舒 从仍舒舒. 丐仂 亠, 仆亠 舒从仂亞仂, 仂 从仍舒 仆舒仍亠亟ム 亟亞 仂 亟亞舒, 舒 仂弍亠从 从仍舒舒-仗仂仂仄从舒 仗仂仍舒亠 仂弍亳亠 于仂亶于舒. 仄亠仂 仂亞仂 仂弍亠从 仆舒仍亠亟ム 仂 仂弍亠从仂于 弍亠亰 于磻亳 从仍舒仂于. 舒仍亠亟仂于舒仆亳亠 仆舒 从仍舒舒 仄仂亢仆仂 仗仂仂亳(仄仍亳仂于舒), 仂仗亳舒 仆舒 弍舒亰仂于仂亠 仆舒仍亠亟仂于舒仆亳亠 javascript. 亠舒仍亳亰亠 仆舒仍亠亟仂于舒仆亳亠 亠亠亰 仆亠磦仆(于仆亠仆仆ム) 仍从 仂亟仆仂亞仂 仂弍亠从舒 仆舒 亟亞仂亶, 从仂仂亶 仆舒亰于舒亠 亠亞仂 仗仂仂亳仗仂仄 亳 于 仗亠亳亳从舒亳亳 仂弍仂亰仆舒舒亠 [[prototype]]. 亅仂 于仂亶于仂 仂弍仆仂 从仂 仂 仗仂亞舒仄仄亳舒. 丐舒从亢亠 亠于亠 于仂亶于仂 仗仂仂亢亳仄 仆舒亰于舒仆亳亠仄 prototype (弍亠亰 从于舒亟舒仆 从仂弍仂从) 仂仆仂 于仗仂仄仂亞舒亠仍仆仂亠 亳 从舒亰于舒亠, 仂从亟舒 弍舒 仗仂仂亳仗 仗亳 仂亰亟舒仆亳亳 仂弍亠从舒. 仂亞亟舒 于 舒于亳亠 仆从亳亳 Person 于仂亶于仂 Person.prototype = XXX 于 亳仄 亟亠从仍舒亳亠亠: "于亠 仆仂于亠 仂弍亠从 从仍舒舒 Person 弍亟 亳仄亠 仗仂仂亳仗 XXX". 舒仄仂亳仄 仗亳仄亠:
  • 43. if (typeof(RiaShamans) == "undefined") RiaShamans = {}; if (typeof(RiaShamans.JSExamples) == "undefined") RiaShamans.JSExamples = {}; /** * Class defines Person Entity * * @class {RiaShamans.JSExamples.Person} * @param name * @param age * @param mass * @returns {RiaShamans.JSExamples.Person} */ RiaShamans.JSExamples.Person = function (name, age, mass) { this.initPerson(name, age, mass); }; RiaShamans.JSExamples.Person.prototype.constructor = RiaShamans.JSExamples.Person; /** * Initialize person Data * * @param name * @param age * @param mass */ RiaShamans.JSExamples.Person.prototype.initPerson = function(name, age, mass){ this.name = name; this.age = age; this.mass = mass; };
  • 44. /** * Returns Person name * * @returns {String} */ RiaShamans.JSExamples.Person.prototype.getName = function(){ return this.name; }; /** * Returns person Age * * @returns Number */ RiaShamans.JSExamples.Person.prototype.getAge = function(){ return this.age; }; /** * Class defines gendered Person Entity * * @class {RiaShamans.JSExamples.GenderPerson} * @augments {RiaShamans.JSExamples.Person} * @lends {RiaShamans.JSExamples.Person.prototype} */ RiaShamans.JSExamples.GenderPerson = function (name, age, mass) { // Inherit parent constructor RiaShamans.JSExamples.GenderPerson.superclass.constructor.call(this, name, age, mass); // this is equivalent of RiaShamans.JSExamples.Person.call(this, name, age, mass); this.gender = "UNKNOWN"; };
  • 45. // Implement Inheritance var GenderPersonPrototype = function(){}; GenderPersonPrototype.prototype = RiaShamans.JSExamples.Person.prototype; // Create prototype without parameters. We can't Instantiate Parent without proper data in some cases. RiaShamans.JSExamples.GenderPerson.prototype = new GenderPersonPrototype(); // Add all parent prototype data to Child class RiaShamans.JSExamples.GenderPerson.prototype.constructor = RiaShamans.JSExamples.GenderPerson; // Set constructor RiaShamans.JSExamples.GenderPerson.superclass = RiaShamans.JSExamples.Person.prototype; // Set superclass for Child /** * Returns Gender * * @returns {String} */ RiaShamans.JSExamples.GenderPerson.prototype.getGender = function(){ return this.gender; }; /** * Set Gender for a Person * * @param value */ RiaShamans.JSExamples.GenderPerson.prototype.setGender = function(value){ this.gender = value; };
  • 46. 2.2.4 弌舒亳亠从亳亠 仄亠仂亟 仂从仂仍从 从仍舒 于 JavaScript (仂仆亳 亢亠 仆从亳亳), 仂 于 于仂 仂亠亠亟 仂弍亠从, 仂 亟仍 仆亳 仄仂亢仆仂 仂仗亠亟亠仍 仗仂仍 于 于亳亟亠 仆从亳亶. 丐舒从舒 仆从亳 弍亟亠 亟仂仗仆舒 弍亠亰 亳仆亳亳舒仍亳亰舒亳亳 仂弍亠从舒 从仍舒舒 亳 于 从仂仆亠从亠 舒仄仂亞仂 从仍舒舒, 磦仍 舒仆舒仍仂亞仂仄 舒亳亠从仂亞仂 仄亠仂亟舒 于 从仍舒亳亠从仂仄 . 舒仄仂亳仄 仗亳仄亠:
  • 47. /** * Factory class. Example of static methods * * @class {RiaShamans.JSExamples.PersonFactory} * @lends {RiaShamans.JSExamples.PersonFactory.prototype} */ RiaShamans.JSExamples.PersonFactory = function(){ }; /** * Factory method. creates person and returns its instance * * @returns {RiaShamans.JSExamples.Person} */ RiaShamans.JSExamples.PersonFactory.createPerson = function(name, age, mass){ var result = new RiaShamans.JSExamples.Person(name, age, mass); return result; };