JavaScript创建对象的方式
概述
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
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13