创建对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建对象相关的知识,希望对你有一定的参考价值。


普通函数--> 形成一个私有的作用域--形参赋值--预解释--代码执行
构造函数--> 形成一个私有的作用域--在私有作用域中,首先浏览器会默认的创建一个对象数据类型的数据 (就是我们这个类的实例)--形参赋值--预解释--代码执行(以当前实例为执行的主体[说明函数中的this是当前的实例],把属性和方法赋值给这个实例)。
构造函数模式中,我们浏览器会默认创建一个实例,并且返回,我们不需要手写return也可以;
如果我们手写了return,返回的是基本数据类型值没有任何的影响,但是如果是引用数据类型值,
会把默认返回的实例进行覆盖(构造函数模式中最好别加返回值)。
1.instanceof:检测某一个实例是否属于这个类,是的话返回true,不是的话返回false
2.in:检测某一个属性是不是这个对象的(既可以检查私有,也可以检查公有的)
3.hasOwnProperty:检测某一个属性是否为这个对象的私有属性(只能检查私有的)


数组中的14个方法是Array这个类中的方法,所以他的实例才可以使用这个方法
构造函数模式虽然解决了实例识别的问题,但是实例间的属性都是私有的,不能公有.

原型链模式-->属性公有

在类的原型链(prototype)上定义公有的属性

查找的机制:首先在自己私有的属性上找,有的话就是私有的;没有的话,
通过__proto__找到所属类的prototype上(这个是公有的),如果有就是公有的属性;
如果还没有,在通过所属类的prototype上的__proto__找到Object基类的prototype上,如果还没有就报错了.


原型模式中的增加属性
实例f1.d=function(){}//给实例f1新增加一个私有的属性d
实例f2.d(); //实例f1增加的私有属性 实例f2并没有
f1.__proto__.m=function(){}//在f1所属类的原型上增加一个公有的属性m
f2.m(); //f1往公有里面增加的属性 f2也能用

用constructor来检测数据类型:

1.类(Fn)是一个函数数据类型,在js中函数即使函数数据类型也是对象数据类型
说它是函数数据类型,因为它可以执行:f() 而且形成私有的作用域、arguments、return、形参...
说它是对象数据类型,因为它可以像我们的对象一样增加属性名和属性值

2.每一个函数(类也是函数)都有一个天生自带的属性:prototype,这个属性存储的是一个对象数据类型的值,并且这个对象数据类型是浏览器天生给它开的空间,在prototype属性对应的堆内存中,有一个天生自带的属性constructor,这个属性指向函数本身。

3.每一个对象数据类型也有一个天生自带的属性:__proto__,这个属性指向所属类的prototype,在IE下不支持__proto__。

以上是关于创建对象的主要内容,如果未能解决你的问题,请参考以下文章

JAVA创建对象有哪几种方式 ???

String 创建几个对象问题(详解

javascript构造函数及原型对象

JS对象的创建

有几种创建对象的方法

创建对象