先看一个对象的操作
var myLi = { name: 'Liyingjie', sex: 25, food: '', eat: function() { this.food = '' }, buy: function(food) { this.food = food } } myLi.buy('shupian') //增删改查 delete myLi.sex //删 console.log(myLi)
对象创建可通过
1. var obj = {}
2. 构造函数 new Object()
看一个构造函数例子
function Person(sex, name, age) { this.sex = sex this.name = name this.age = age //可以显示的返回对象 return {} //如果不是对象 比如 return 123 则会返回 return this } var person = new Person('男', 'LiYingjie', 25) //person为Person的实例 console.log(person instanceof Person)
构造函数原理
1.在函数体最前面隐式加上 var this = {}
2.执行 this.xxx = xxx
3.隐式的返回this
包装类(对于number string boolean)
string number boolean 分别有两种值,一种是原始值,一种是对象值
看一下例子
var str = new String() var num = new Number(2) var boo = new Boolean() // 例如数值对象 有 属性和方法 num.abc = 'a' num.say = function () { console.log('hello') } console.log(num) console.log(num.abc) //a num.say() //hello //但是当 对num进行运算操作后 num就变成原始值 (这句话有点问题,可以像原始值一样进行运算,num也还是个数值对象,原来的属相方法也还是存在) console.log(num * 4) //8 console.log(num) console.log(num.abc) //a num.say() //hello
再看一个包装类的解析例子
var str = 'abcd' //原始值是没有属性和方法的,如果对原始值进行属性的赋值和访问,会new一个字符串对象 new String() str.abc = 'a' //隐式的转换成字符串对象(这种形式叫包装类), num String('abcd').abc = 'a' delete 然后删除 console.log(str.abc) //隐式的转换成字符串对象(这种形式叫包装类), num String('abcd').abc 因为上一步和这一步是不同的两个对象,且上一步变成包装类后又被删除,这一步刚形成包装类 属性abc也是不存在的, undefined str.length = 2 //隐式转new String('abcd') new String('abcd').length = 2 delete console.log(str) //对原始值不影响,还是 'abcd' console.log(str.length) //隐式转new String('abcd').length = 4 length属性石系统自带的属性,所以存在
end !!!