js13--對象、原型
阿新 • • 發佈:2017-05-17
ray 指向 判斷 概念 工廠 根據 另一個 object.h ack
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <script type=text/javascript charset=utf-8> var obj = new Object(); // 一樣的var obj = {}; var a = new F(); obj.name = ‘z3‘; obj.sex = ‘男‘; obj.sayName = function(){alert(‘我是張三!‘)}; // 類的概念 // 第一種形式 工廠模型 function createPerson(name , sex , age){ var obj = new Object(); obj.name= name ; obj.sex = sex ; obj.age = age ; obj.sayName = function(){ alert(this.name); } return obj; } var p1 = createPerson(‘z3‘ , ‘男‘ , 20); var p2 = createPerson(‘z4‘ , ‘女‘ , 25); alert(p1.sex); p1.sayName();// 第二中形式 構造函數式 new Array new Date // 函數的第一個字母大寫 (類的模版) function Person(name , age , sex){ this.name = name ; this.age = age ; this.sex = sex ; this.sayName = function(){ alert(this.name); } } //構造一個對象 new關鍵字 傳遞參數 執行模版代碼 返回對象 var p1 = new Person(‘小1‘ , 20 , ‘男‘); var p2 = new Person(‘小2‘ , 21 , ‘女‘); alert(p1.name); p1.sayName(); alert(p1 == p2); //false, alert(p1.constructor == Person); alert(p2.constructor == Person); alert(p1 instanceof Person); //true alert(p1 instanceof Object); //true //創建對象的方式: // 1當作構造函數去使用 : var p1 = new Person(‘小1‘ , 20 , ‘男‘); // 2作為普通的函數去調用 Person(‘小2‘ , 25 , ‘男‘);//在全局環境裏定義屬性並復制 直接定義在window上,this是window, alert(name); // 3在另一個對象的作用域中調用 var o = new Object(); // call applly Person.call(o,‘小4‘ , 12 , ‘女‘); //o動態加一個方法,一次性的,復制方法的屬性 alert(o.name); </script> </head> <body> </body> </html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <script type=text/javascript charset=utf-8> //同級函數可以互相訪問 function Person(name , age){ this.name = 1 ; sayName() ; //同級函數可以互相訪問 alert(333); } function sayName(){ alert(222); Person();//同級函數可以互相訪問 } // 原型 prototype function Person(name , age){ this.name = name ; this.age = age ; this.sayName = function(){alert(‘我是姓名!‘)};//後面的函數看成匿名對象,每次不一樣。函數可以公用,放在原型裏面。 this.sayName = sayName1 ; //右邊的函數是外部的函數 } // 定義了一次函數 function sayName1(){ alert(this.name); } var p1 = new Person(‘z3‘,20); var p2 = new Person(‘z4‘,21); p1.sayName(); p2.sayName(); alert(p1.sayName == p2.sayName); // false alert(p1.name == p2.name); // false // prototype 創建每一個函數都有一個prototype屬性,這個屬性其實是一個指針,而這個指針總指向一個對象 // 這個對象的用途就是將特定的屬性和方法包含在內,起到一個所有實例所共享的作用 //閉包實現了函數層面多個子函數共享父類函數的屬性、方法。類層面上原型實現了多個子類對象共享父類對象的屬性、方法。 function Person(){} var obj = Person.prototype;//原型的構造器是函數本身 alert(typeof obj);//object obj.name = ‘z3‘; obj.age = 20 ; obj.sayName = function(){alert(this.name);};//原型對象裏面的this是對象自己 var p1 = new Person(); var p2 = new Person(); alert(p1.age); alert(p2.age); p1.sayName(); p2.sayName(); alert(p1.sayName == p2.sayName)//true,同一個地址 //函數.prototype = 原型對象,原型對象.constructor = 函數 alert(obj.constructor);//Person //實例對象.prototype = 原型對象 alert(p1.prototype); alert(obj.isPrototypeOf(p1));//是不是這個對象的原型 //Object.getPrototypeOf():根據實例對象獲得原型對象 //object.hasOwnProperty(attribute) 判斷屬性是否屬於對象本身 //in 操作符 判斷對象中是否存在該屬性(無論是實例對象還是原型對象) //Object.keys();拿到當前對象裏的所有keys 返回一個數組 //getOwnPropertyNames 枚舉對象所有的屬性 :不管該內部屬性能否被枚舉 </script> </head> <body> </body> </html>
js13--對象、原型