基本形式
var 对象名字 = {
属性1:属性值,(逗号隔开)
属性2:属性值
}
属性值可以是一个函数。并且当对象里要引用该对象属性值时候,可以用this来代替对象名字,
eg:对象名字.属性1=this.属性1
在外面可以给对象加值,eg:对象名字.新属性 = 属性值;
当属性值是一个函数时,执行该属性,会返回undefined。
删除属性值用delete 对象名字.属性
obj.name---->obj[‘name’]是一样的,括号里面是字符串。obj[‘name’]更加灵活,可以obj[‘name’+num];
对象的创建方法
1.var obj ={ } plainObject 对象字面量/对象直接量
2.构造函数
1)系统自带的函数 object()
var obj = new Object( );与第一种没有任何区别。
2)自定义
eg:
function Car(){
this.name = "BMW";
}
var car = new Car();
function Car(color){
this.color = color;
this.name = "BMW";
}
var car = new Car('red');
构造函数内部原理
1.在函数体最前面隐式的加上this = {},前提是加new
例如
function Car(){
//var this={} 会先加上一个this的空对象
this.name = "BMW";
}
var car = new Car();
//return this;
2.执行this.xxx=xxx;
给this里面的属性赋值。
3.隐式的返回this。
前面加new的话必须返回一个对象值。否则会被忽略。
包装
var num = new Number(123);
var str = new String(‘abcd’);
var bol = new Boolean(‘true’);
此时 num,str,bol都成为一个对象,可以拥有属性。
初始值(num str Boolean undefined object function等)没有属性,不转变为对象的话会内部转换为对象再删除,引用的时候会重新转换,两次的Number并不一样。
eg
var str = "abcd";
str.length=2;
console.log(str.length);
结果是4。
var str = "abc";
str+=1;
var test = typeof(str);
if(test.length==6){
test.sign ="dfasdf";
}
console.log(test.sign);
结果是undefined。所以说两次隐式对象并不一样。