javascript对象及包装类

先看一个对象的操作

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 !!!

 

posted @ 2020-10-14 15:26  杰哥之家  阅读(135)  评论(0编辑  收藏  举报