原型/原型和构造函数
对象的原型
1:原型概念:每个对象都有一个[[prototype]],这个属性称之为对象的原型(隐式原型)
浏览器提供__proto__可以看到
2:原型有什么作用 每次查找对象里面的属性时,都会调用[[get]]
第一步先在对象里面查找
第二步对象里面查找不到去原型里面查找
函数的原型(函数也是一个对象 里面也有__proto__)
1:函数因为是一个函数,所以它会多出来一个显示原型属性名字为prototype
!!!new操作会把函数的原型赋值给对象的隐式原型 所以—__proto__才会指着函数的原型prototype
例如:
1 function foo() { 2 3 } 4 var f1 = new foo() 5 console.log(f1.__proto__ === foo.prototype);

2:原型上面都会有一个属性 constructor 指向当前的函数对象
1 function foo() { 2 3 } 4 var f1 = new foo() 5 console.log(f1.__proto__.constructor);

3:创建对象的内存表表现

4:如果要给原型对象上面添加很多属性,我们可以重写原型对象,这个constructor可以利用Object.defineProperty()来添加
1 function Person() { 2 3 } 4 Person.prototype = { 5 name: '张三', 6 age: 18, 7 address: "广州" 8 } 9 Object.defineProperty(Person.prototype, 'constructor', { 10 configurable: true, 11 enumerable: true, 12 writable: true, 13 value: '嘿嘿' 14 }) 15 var f1 = new Person() 16 console.log(f1.name); 17 console.log(f1.__proto__); 18 console.log(f1.__proto__.constructor);

前面已经讲到构造函数创建多个对象的缺点,我们可以通过在函数原型上添加函数来解决这一问题
原型和构造函数:
1 function Person(name, age, address) { 2 this.name = name 3 this.age = age 4 this.address = address 5 } 6 Person.prototype.eating = function() { 7 console.log(this.name + '在吃饭'); 8 } 9 var p1 = new Person('张三', 12, '广州') 10 var p2 = new Person('李四', 18, '深圳') 11 var p3 = new Person('王五', 24, '上海') 12 p1.eating() 13 p2.eating()


浙公网安备 33010602011771号