js基础-对象,包装类
js基础-对象,包装类
属性的增、删、改、查
增加属性: Obj.newProp = ‘what’;
删除属性: delete Obj.Prop
修改属性: Obj.newProp = ‘new’;
查询属性: Obj.name
对象的创建方法
- var Obj = {} //plainObject 对象字面量/对象直接量
构造函数
- 系统自带的构造函数 new Object()
- 自定义构造函数
function addNum () {// 函数 (小驼峰命名)
}
function AddNum() {// 构造函数 (大驼峰命名)
}
var add1 = new AddNum();
构造函数内部原理:
前提:new
1.在函数体前面隐式地加上this={};
2.执行this.xxx=xxx;
3.隐式地返回this。
function AddNum(){
// var this = {}
console.log(1-1)
//return this
}
addNum1 = new AddNum()
当一个变量没有声明,访问会报错
当一个对象属性没有声明,访问时undefined
包装类
每当读取一个基本类型的值的时候,后台就创建一个对应的基本包装类型的对象,从而让我们能够调用一些方法来操作这些数据。
- Boolean
- String
- Number
- Symbol
除了 null 和 undefined,所有的原始值都有等价的、由对象包装原始值的形式表达,取而代之,null 和 undefined 常被当作一个全局对象的全局属性来使用。
原始值不能有属性和方法,当给它们添加属性的时候系统会自动进行包装类并销毁。
包装类过程
var num = 4;
num.len = 3; // 系统隐式执行
//原始值当对象用赋值,系统为了不报错会进行包装类处理
// new Number(4).len = 3; delete 执行完会销毁
console.log(num.len) //系统隐式执行
//再次访问 num.len 又会进行一次 new Number(4).len 因为不存在len这个属性 所以undefined
//new Number(4).len
var sym = new Symbol(); // TypeError: Symbol is not a constructor
// 这是因为围绕原始数据类型创建一个显式包装器对象从 ECMAScript 6 开始不再被支持。 然而,现有的原始包装器对象,如 new Boolean、new String 以及 new Number 因为遗留原因仍可被创建。
例题
1、
var str = 'abc';
str += 1;
var test = typeof(str);
if(test.length == 6) {
test.sign = 'typeof的返回结果可能为String';
}
console.log(test.sign) // ???
2、
var Person (name, age, sex) {
var a = 0;
this.name = name;
this.age = age;
this.sex = sex;
function sss() {
a++;
console.log(a);
}
this.say = sss;
}
var person1 = new Person();
person1.say(); // ???
person1.say(); // ???
var person2 = new Person();
person2.say(); // ???
3、
var str = 'hello';
str.len = 5;
console.log(str.len)
var str1 = new String("Hello");
str1.len = 6;
console.log(str1.len)
还没有评论,来说两句吧...