• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

JavaScript创建对象的方式

武飞扬头像
不见长安见晨雾
帮助1

概述

JavaScript有多种创建对象的方式。

方式一:new function构造函数

function DogFactory(type, color) {
    this.type = type
    this.color = color
}
// 方式一:new
var dog = new DogFactory('Dog', 'Black');
console.log(dog)
// new DogFactory('Dog', 'Black')等同于下面三步

// 方式二
var dog2 = {}
dog2.__proto__ = DogFactory.prototype;
DogFactory.call(dog2, 'Dog', 'Black');

console.log(dog2)

学新通

关于__proto__和prototype的关系

每个函数对象中都有一个公开的 prototype 属性,当你将这个函数作为构造函数来创建一个新的对象时,新创建对象的原型对象就指向了该函数的 prototype 属性。如果只是正常调用该函数,那么 prototype 属性将不起作用。

当通过一个构造函数创建多个对象的时候,这几个对象的原型都指向了该函数的 prototype属性。

个人理解:

由于所有对象访问的是同一个prototype,所以prototype属性等同于与Java中的静态属性。
每个对象的成员属性通过this添加,而静态属性则通过prototype添加。

  function DogFactory(type, color) {
      this.type = type
      this.color = color
  }
  // 给function的prototype添加属性
  DogFactory.prototype.fun1 = function (info) {
      console.log(info)
  }
  // 对象原型(__proto__)默认指向的是function的prototype
  var dog = new DogFactory('Dog', 'Black');
  console.log(dog)
  dog.fun1("哈哈")

学新通

问题:DogFactory 是一个函数,那么“DogFactory.prototype”和“DogFactory.proto”这两个属性之间有关联吗?

DogFactory 是 Function 构造函数的一个实例,所以 DogFactory.proto === Function.prototype
DogFactory.prototype 是调用 Object 构造函数的一个实例,所以 DogFactory.prototype._ proto _ === Object.prototype
因此 DogFactory.proto 和 DogFactory.prototype 没有直接关系。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghbije
系列文章
更多 icon
同类精品
更多 icon
继续加载