<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <script type="text/javascript"> //创建对象 //原型模式 //更简单的原型语法 //之前为原型添加属性都要写一遍prototype,麻烦,解决方法如下 function Person(){}; Person.prototype = { name: "宝清老窖", age: 30, job: "Software", sayName: function(){ console.log(this.name); } } //简便了不少哈,但是constructor属性不再指向Person了,因为我们重写了prototype //虽然instanceof还能返回正确的结果,但是constrctor已经无法确定对象的类型 var friend = new Person(); console.log(friend instanceof Object); //true console.log(friend instanceof Person); //true console.log(friend.constructor == Person); //false console.log(friend.constructor == Object); //true console.log('---------------------------------------------------'); //所以需要改造成下面的方式 function Person(){}; Person.prototype = { constructor: Person, name: "宝清老窖", age: 30, job: "Software", sayName: function(){ console.log(this.name); } } var friend = new Person(); console.log(friend instanceof Object); //true console.log(friend instanceof Person); //true console.log(friend.constructor == Person); //true console.log(friend.constructor == Object); //false //但是以这种方式的话,constructor的[[Enumerable]]为true //所以得改成false function Person(){}; Person.prototype = { name: "宝清老窖", age: 30, job: "Software", sayName: function(){ console.log(this.name); } } Object.defineProperty(Person.prototype , 'constructor' , { enumerable: false, value: Person }) //Object.keys(Person.prototype);为 ["name", "age", "job", "sayName"] </script> </body> </html>
提取出js
//创建对象 //原型模式 //更简单的原型语法 //之前为原型添加属性都要写一遍prototype,麻烦,解决方法如下 function Person(){}; Person.prototype = { name: "宝清老窖", age: 30, job: "Software", sayName: function(){ console.log(this.name); } } //简便了不少哈,但是constructor属性不再指向Person了,因为我们重写了prototype //虽然instanceof还能返回正确的结果,但是constrctor已经无法确定对象的类型 var friend = new Person(); console.log(friend instanceof Object); //true console.log(friend instanceof Person); //true console.log(friend.constructor == Person); //false console.log(friend.constructor == Object); //true console.log('---------------------------------------------------'); //所以需要改造成下面的方式 function Person(){}; Person.prototype = { constructor: Person, name: "宝清老窖", age: 30, job: "Software", sayName: function(){ console.log(this.name); } } var friend = new Person(); console.log(friend instanceof Object); //true console.log(friend instanceof Person); //true console.log(friend.constructor == Person); //true console.log(friend.constructor == Object); //false //但是以这种方式的话,constructor的[[Enumerable]]为true //所以得改成false function Person(){}; Person.prototype = { name: "宝清老窖", age: 30, job: "Software", sayName: function(){ console.log(this.name); } } Object.defineProperty(Person.prototype , 'constructor' , { enumerable: false, value: Person }) //Object.keys(Person.prototype);为 ["name", "age", "job", "sayName"]