js用new实例化对象与直接调用的this的区别

JavaScript018

js用new实例化对象与直接调用的this的区别,第1张

function Fun(argument1,argument2){

return this

}

//直接调用

var f1 = Fun()// window {}

//实例化对象

var f2 = new Fun()// Fun {}

f1 只是调用 Fun函数,而 f2是实例化对象 Fun。两个的this指向的不是同个地方。调用函数的this指向的是window,实例化对象的this指向的是对象本身。

(构造函数的命名通常使用驼峰命名法,首字母大写,以此和普通的函数区分开来,这是一种习惯用法。)

测试例子:

如上,f只是调用fun1,输出的第一个this是指向window的。fun2也只是调用,所以this也是指向windowde。a是实例化的对象,this指向的是fun3实例化后的对象。

如果做下面调整。

如上,fun1跟fun3是被实例化,this指向对象本身,fun2只是调用,this指向window。

那给this的属性赋值会有什么样的结果呢?

调用函数里面的this属性赋值都是给window赋值的。

如果 fun1()改成 var a = new fun1()呢?

大家仔细看看输出的结果。

new创建对象的符号。比如new

Object(),new

Array()

this可以代表对象,比如this可以代表window,也可以代表某个元素。具体的要看this所处的当前作用域。

Date是日期对象,用的时候要实例化。

实例化:d=new

Date()

操作对象,主要是操作对象的属性和方法

js可以创建并使用的对象有三种:本地对象、内置对象和宿主对象。本地对象就是ECMA-262定义的类(引用类型),应该都是可以new的。另外自己定义或继承的对象(函数)都是可以new的。ECMA-262把内置对象(built-inobject)定义为“由ECMAScript实现提供的、独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。所有非本地对象都是宿主对象(hostobject),即由ECMAScript实现的宿主环境提供的对象。所有BOM和DOM对象都是宿主对象。希望可以帮到你