面向对象

1、创建对象

(1)字面量方式创建对象
var obj = {...}
(2)内置构造函数创建对象
var obj = new Object()
(3)工厂函数创建对象
function create(name,age){
  var obj = {}
  obj.name = name
  obj.age = age
  return obj
}
var obj1 = create('Jack',18)
var obj2 = create('Rose',20)
console.log(obj1,obj2)
(4)自定义构造函数创建对象
function createObj(name,age){
  this.name = name
  this.age = age
}
var obj1 = new createObj('Jack',18)
var obj2 = new createObj('Rose',20)
console.log(obj1,obj2)

2、构造函数的使用

调用构造函数时与new连用,与普通函数没有区别;
书写构造函数,函数名首字母大写;
调用构造函数时,如果不需要传递参数,可以不写最后的小括号;
构造函数内部不要随便写return。

——构造函数的不合理:只要创建一次(new一次)就有一个函数在占用空间——原型

3、原型prototype:每一个函数天生自带一个属性,叫做prototype,是一个对象——解决了上面说的构造函数的不合理性,prototype专门给实例对象使用

<script>
  function Person(){}

  Person.prototype.a=18
  Person.prototype.b=50

  console.log(Person.prototype)

  //创建一个实例对象
  var p1 = new Person()

  //每一个对象天生自带一个属性__proto__,指向所属构造函数的prototype
  console.log(p1.__proto__ === Person.prototype)
</script>

4、原型链:用__proto__串联起来的对象链状结构,每一个对象数据类型,都有一个属于自己的原型链

作用——为了访问对象成员
<script>
  function Person(){}
  //创建一个实例对象
  var p1 = new Person()
  //实例对象身上的__proto__指向所属构造函数的prototype,即p1.__proto__指向Person.prototype
  //Person.prototype和Function.prototype都是对象数据类型(Object),在JS内所有的Object数据类型都属于Object这个内置构造函数,因此Person.prototype和Function.prototype的__proto__都指向               Object.prototype
  //Person和Object都是函数,在JS内所有的函数都是Function这个内置构造函数的实例,因此Person.__proto__和Object.__proto__都指向指向Function.prototype
  //注意:Object.prototype在JS 内叫做顶级原型,不再有__proto__,因此Object.prototype的__proto__指向null
</script>

 

posted @ 2022-03-06 12:20  ljllh  阅读(33)  评论(0)    收藏  举报