var person = new Object(); person.name = "bob"; person.age = 34; person.job = "Software"; person.sayName = function(){ alert(this.name); } // 对象字面量写法 var person = { name:"zhs", age:32, job:"Software", sayName:function(){ alert(this.name); } } // 工厂模式 function creatPerson(name,age,job){ var o = new Object(); o.name = name; o.age = age; o.sayName = function(){ return this.name } return o; } var p1 = new creatPerson("bob","220","清洁工"); console.log(p1); // 构造函数模式 (有点 可以判断对象类型) function Person(name,age,obj){ this.name = name; this.age = age; this.obj = obj; this.sayName = function(){ // alert(this.name); } } var pa1 = new Person("sos",44,"软件工程师"); var pa2 = new Person("ccc",22,"软件工程师"); console.log(pa2.constructor == Person); // true 检测对象类型 console.log(pa2 instanceof Person) // true var o = new Object(); o = pa1; Person.call(o,"aaa",55,"sss"); console.log(o.sayName()); // 原型模式 function Ps(){} Ps.prototype.name = "asd"; Ps.prototype.age = 34; var ps1 = new Ps(); console.log(ps1.age); //34 // hasOwnPrototype() 原型属性返回 false,实例属性返回 true // in 包含原型属性返回 true var ps2 = new Ps(); ps2.name = "cacaca"; console.log(ps2.name); console.log(ps2.hasOwnProperty("name")); // true console.log("age" in ps2); // true
// 判断原型属性 函数 function hasPrototyperty(object,name){ return !object.hasOwnProperty(name) && (name in object); } var ps3 = new Ps(); ps3.name = "aaac"; // 实例属性 console.log(hasPrototyperty(ps3,"name")); // false