<!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>