面向对象高级 构造函数 实例对象

**抽象的(构造函数-相当于一个模板)**

​ **具体的(实例对象)**

 javascript

// 构造函数--模板

function GirlFriend(name,age,profile,favours){

  this.favours = favours;

  this.name = name;

  this.age = age;

  this.profile = profile;

  this.eating = function(){

    console.log(this.favours);

  }

  this.shopping = function(){

    console.log('shopping');

  }

  this.coding = function(){

    console.log('coding');

  }

}

// 具体的实例对象

var gf1 = new GirlFriend('翠花',35,'沉鱼落雁,闭月羞花'['香蕉','苹果','梨']);

var gf2 = new GirlFriend('翠花',35,'ugly'['糕点','红豆冰','韭菜盒子']);

 

// 工厂(用来生产实例对象)(设计模式)

function factory(name,age){

  //var obj = new Object();

  //var obj = new Object;// 如果构造函数不需要传递参数,那么实例化时可以省略括号

  var obj = {};

  obj.name = name;

  obj.age = age;

  return obj;

}

var o1 = factory('tom',12);

var 02 = factory('jerry'13);

实例对象如何产生?

1. 通过构造函数实例化 new

2. 对象字面量(本质上内部也需要构造函数)

 所有的实例对象都有一个对应的构造函数(包括DOM实例对象)

   一般情况下真正的数据存储在实例对象中,而不是在构造函数中

对象实例化本质:

1. 浏览器根据构造函数在内存中开辟一块内存

2. 浏览器会给上面产生的内存起一个名字this(本质上就是内存地址)

3. 通过this给这块内存添加数据

4. 把this返回给一个变量

 

构造函数(模板-抽象的)

 

实例对象(具体的)

 

原型 1、数据共享(实例对象共享数据);2、实现继承)

 

三者关系及联系:

1. 所有的构造函数中都有一个原型属性prototype,本质上该属性就是对象(Object的实例对象),该属性位于函数上

2. 原型对象中默认有一个属性constructor,该属性指向原型所属的构造函数

3. 所有的实例对象中都有一个--proto--属性,该属性也指向构造函数的原型对象,注意:--proto--属性不可以在编程中使用,该属性不是标准属性,实际上该属性是浏览器内部自己使用的,该属性位于实例对象

 

prototype与--proto--:这俩个属性从本质上没有差别,都指向内存的同一个位置

 

```javascript

/*

 

原型链是什么?

实例对象和原型对象之间形成的链式结构(链接节点的属性是--proto--)

对于原型链来说,属性的搜索规则:优先从链的起点查询,如果找到了,就返回,如果没有找到就去上层节点查询,直到查询到Object.prototype,如果这里还没有找到就证明,没有该属性

转载于:https://www.cnblogs.com/first1-you/p/6821990.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值