构造函数及原型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h2>面向对象</h2> <pre> 一切皆为对象 对象是类的一个实例,对象有属性和方法,对象表示属性的无序集合 声明对象 var person = { name: "张三", age: 20 } 2.构造函数创建对象 用来创建对象的函数 与普通函数的区别: 首字母大写 里面的this所指的是实例对象 没有return语句,直接返回对象 调用构造函数时,new会自动创建this对象,且类型就是构造函数类型 对象有一个constructor属性,指向他的构造函数 3.prototype原型模式 javascript里面,每一个构造函数都有一个prototype属性,指向另一个对象,这个对象的所有属性和方法都会被构造函数的实例继承 所以,我们可以把那些不变的属性和方法定义在prototype对象上。 辅助方法: isPrototypeOf() 判断对象是否继承了构造函数的prototype属性 hasOwnProperty() 用来判断某一个属性是自己的属性还是prototype的属性 如果是自己的,则返回true 如果是继承prototype的,则返回false delete 删除属性 in 用来判断某个实例是否含有某个属性 还可以遍历某个对象的属性 </pre> <script> var person = { name: "张三", age: 20, show: function(){ alert(this.name) } } person.height = "180"; // person.show(); // alert(person.height); //alert(person.name) //通过构造函数来创建对象 function Person(name,age){ this.name = name; this.age = age; //this.type = "人类"; } Person.prototype.type = "人类"; Person.prototype.sayHi = function(){ alert("hello!"); } var p1 = new Person("张三", 20); p1.type = "黄种人"; var p2 = new Person("李四", 23); //alert(p1.constructor == p2.constructor); //alert(p1.type) //黄种人 //console.log(p1) // p1.sayHi(); // p2.sayHi(); //alert(Person.prototype.isPrototypeOf(p1));//true //alert(p2.hasOwnProperty("type")); // delete p1.type; // alert(p1.type); //人类 // alert("type" in p1); //true for(var k in p1){ console.log(k+":" + p1[k]) } // 输出 /*name:张三 age:20 type:人类 sayHi:function (){ alert("hello!"); }*/ </script> </body> </html>