• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
love千与千寻
博客园    首页    新随笔    联系   管理    订阅  订阅

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

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

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

 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,如果这里还没有找到就证明,没有该属性

posted @ 2017-05-07 19:51  love千与千寻  阅读(397)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3