Object(),new
Array()
this可以代表对象,比如this可以代表window,也可以代表某个元素。具体的要看this所处的当前作用域。
Date是日期对象,用的时候要实例化。
实例化:d=new
Date()
操作对象,主要是操作对象的属性和方法
现在写一个函数,这个函数的返回值是一个对象,来观察一下这个对象,和函数体内this指向
①,对象a就是一个空对象
②,对象a没有color属性
③,对象a原型指向Object.prototype
④,函数体内this指向window(上图可见,没调用函数之前,window.color属性不存在)
在执行函数时,加一个new试试看有啥效果:
①,没有return,这个函数居然返回了一个对象
②,对象a有个color属性
③,对象a的原型指向了这个构造函数的prototype属性
④,window对象没有color属性
⑤,this指向了对象a
由上得出总结new的作用:
①,new能让一个构造函数返回一个对象(下面称为A)而无需return
②,new会让函数体内的this指向这个A
③,new会让A的原型指向这个构造函数的prototype属性
PS:
①,new只用了三个字符,却实现了很多功能,非常贴心,可以称呼new为语法糖或贴心语法( syntactic sugar )
②,一个函数自带prototype对象,而且里面默认有一个constructor属性,这个属性返回实例对象的构造函数,如果你重新给prototype对象赋值,小心不要覆盖掉它
③,如果使用new,函数内就别 return一个对象 了 ,这样返回的是return后面的对象,this不会指向它
④,就算函数体内空空如也,new的作用不变
它创建一个新对象。这个对象的类型就是 object 。
它将这个新对象的内部不可访问的 [[prototype]] (即 proto )属性设置为构造函数的外部可访问 原型 对象(每个函数对象都会自动具有 prototype 属性)。
它使this变量指向新创建的对象。
每当this提及时,它都会使用新创建的对象执行构造函数。
除非构造函数返回非null对象引用,否则它将返回新创建的对象。在这种情况下,将返回该对象引用。
注意: 构造函数 是指new关键字后面的函数,如
new ConstructorFunction(arg1, arg2)完成此操作后,如果请求新对象的未定义属性,则脚本将改为检查对象的 [[prototype]]
对象的属性。这就是您可以获得类似于JavaScript中传统类继承的方式的方法。
关于这一点,最困难的部分是点号2。每个对象(包括函数)都具有称为 [[prototype]]的 内部属性。它可以 只
被在创建对象的时间与设置,无论是 新的 ,具有 的Object.create
,或者基于文本(函数默认Function.prototype的,数字到Number.prototype等)。只能使用
Object.getPrototypeOf(someObject) 读取它。有 没有 其他的方式来设置或读取此值。
除了隐藏的 [[prototype]] 属性外,函数还具有一个称为 prototype
的属性,您可以访问和修改此属性,以为您创建的对象提供继承的属性和方法。