JavaScript学习_1构造函数和原型

版权声明:随意了,开心就好。反正是给大家分享的笔记 https://blog.csdn.net/u011486491/article/details/86187947

JavaScript学习_1构造函数和原型

## 通过构造函数创建对象

function Person (name, age) {
  this.name = name
  this.age = age
  this.sayName = function () {
    console.log(this.name)
  }
}
​
var p1 = new Person('Jack', 18)
var p2 = new Person('Jack', 16)
p1.sayName() // => Jack
​

问题:

1、通过new 创建出来的对象,里面的所有数据都是一个新的对象和空间,因此数据也无法共享。创建多了之后浪费空间。

解决:

通过原型来解决!

原型对象

每一个构造函数都有一个 prototype 属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。这也就意味着,我们可以把所有对象实例需要共享的属性和方法直接定义在 prototype 对象上。

function Person (name, age) {
  this.name = name
  this.age = age
}
​
console.log(Person.prototype)
​
Person.prototype.type = 'human'
​
Person.prototype.sayName = function () {
  console.log(this.name)
}
​
var p1 = new Person(...)
var p2 = new Person(...)
​
console.log(p1.sayName === p2.sayName) // => true

注意:

  • 任何函数都具有一个 prototype 属性,该属性是一个对象

  • 构造函数的 prototype 对象默认都有一个 constructor 属性,指向 prototype 对象所在函数

  • 通过构造函数得到的实例对象内部会包含一个指向构造函数的 prototype 对象的指针 __proto__

  • 所有实例都直接或间接继承了原型对象的成员

  • 查找对象属性的时候,实例对象中没有的话会去原型对象中去找。

原型对象的使用

原型对象使用建议

  • 私有成员(一般就是非函数成员)放到构造函数中

  • 共享成员(一般就是函数)放到原型对象中

  • 如果重置了 prototype 记得修正 constructor 的指向

注意:

最好不要让实例之间互相共享这些数组或者对象成员,一旦修改的话会导致数据的走向很不明确而且难以维护。

猜你喜欢

转载自blog.csdn.net/u011486491/article/details/86187947