js中的字面量与构造函数创建对象

在使用百度地图JavaScript API中,多次看到类此语句"此类没有构造函数,但可通过对象字面量形式表示"。特此了解下:
一、在JavaScript中没有所谓的空对象,即使最简单的{}也具有从Object.prototype继承的方法和属性。
二、创建对象的两种等价的方法:
1.使用字面量方法创建对象:var oschina={goes:"far"};
2.使用内置构造函数创建对象:var oschina=new Object(); car.goes="far"。
我们应该尽量使用字面量创建对象,其显著优点在于它仅仅输入更短的字符。但是选择它还有以下几个更重要的原因:
  1.选择字面量法创建对象强调该对象仅是一个可变的hash映射,而不是从对象中提取的属性或方法。
  2.对使用Object构造函数相比,使用字面量在于它并没有作用域解析。因为可能以同样的名字创建一个局部函数,解释器需要从调用Object为0的位置开始一直向上查询作用域链,直到发现全局Object构造函数。
  3.构造函数Object可以仅接收一个参数,并且还依赖传递的值,该Object()可能会委派另一个内置函数来创建对象,并且返回了一个并非期望的不同对象。如将数字、字符串、布尔值当做参数传递给Object构造函数,其结果是获得了以不同构造函数所创建的对象,例如:var oschina=new Object(1); oschina.constructor为Number;传递的值是动态的,知道运行时才确定其类型,这种行为会导致意想不到的结果。
三、构造函数仍然是函数,但它需要用new操作符调用,若忘记用new操作符会导致构造函数中的this指向全局对象(浏览器中指向window),如下面代码:
function  abc(){
 this.after = "def";
}
//定义对象
var oschina = new abc();
alert(typeof oschina); //‘object‘
alert(oschina.after);//‘def‘;
 
var oschina = abc();
alert(typeof oschina); //‘undefined‘
alert(window.after);//‘def‘;
 四、检查数组性质。当数组作为操作数并使用typeof操作符时,其结果会返回"object",因为数组也是对象。但是这对于排除错误没有什么帮助,通常我们需要知道某个值是否为一个数组。有时候检查代码可以用是否存在length属性或一些数组方法,但是这些检查并非万能,我们无法确定一个非数组对象就不能拥有这些属性和方法。还可以使用instanceof Array进行检查,但是这种检查存在兼容性问题。
ECMAScript定义了Array.isArray()方法,接收参数为数组时返回true。但是有些环境不支持这种方法,最好检查数组性质的方法是Object.prototype.toString.call方法,若是数组会返回[object Array]。因此要用如下方法检测:
if(typeof Array.isArray === "undefined"){
  Array.isArray = function(arg){
     return Object.prototype.toString.call(arg) === "[object Array]";
  };
}
//调用Array.isArray()
五、在一般情况下没,除了Date()构造函数以外,很少需要用其他内置构造函数。
js中的字面量与构造函数创建对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值