JavaScript对象学习 构造函数 包装类 练习题

// 对象的增删改查

// 定义一个对象
var obj = {
    name: 'zhangsan',
    age: 18
};

// 增
obj.sex = 'male';

// 改
obj.age = 20;

// 查
console.log(obj.name);

// 删
delete obj.age;

对象创建方法

// 1. 对象字面量/对象直接量
var obj = {} // plainObject

// 2.构造函数
    // 1) 系统自带的构造函数 Object()
    var obj2 = new Object(); // 每执行一次就生产一个对象,每次生产的对象都一样,但相互独立
    obj2.name = 'xiaozhang';
    obj2.fn = function(){};
    // 2) 自定义构造函数
    // 构造函数结构上和函数没有任何分别,构造一个对象需要用new 操作符。
    // 为了区别构造函数和函数有区别,人为的定义了一个代码规范 用大驼峰式命名规则
    function Person() {
        
    }
    var person1 = new Person();

构造函数内部原理

  1. 在函数体最前面隐式加上this = {}
  2. 执行this.xxx = xxx;
  3. 隐式返回this
function Student(name, age, sex) {
    // var this = {};
    this.name = name;
    this.age = age;
    this.sex = sex;
    this.say = function (){
        console.log(this.name);
    }
    // return this; 
}
console.log(new Student('xiaoming',18,'male').name)

如果用构造函数,要更改返回值 必须为对象(数组,function,{}),其他返回值无效(number,Boolean。。)

var Person(name, height) {
    this.name = name;
    this.height = height;
    return {};
}
var person1 = new Person('xiaowang',180);
console.log(person1); // object {}

var Person2(name, height) {
    this.name = name;
    this.height = height;
    return 123; // 无效 依然返回this
}
var person2 = new Person2('xiaowang',180);
console.log(person1); // person2 {name: 'xiaowang', height: 180}

包装类

var num = new Number(123);
var str = new String('abcd');
var bol = new Boolean('true');

// undefined null 不能有属性

// 原始值不能有属性方法 使用属性方法会进行一个包装类
var str = 'abc';
console.log(str.length); // 3

var num = 3;
num.len = 1;
// new Number(3).len = 1; delete
// 隐式进行包装类操作,然后删除

var str2 = 'abcd';
str.length = 2;
console.log(str); // 'abcd'

// str2 是原始值 不能有属性方法
// new String('abcd').length = 2 然后系统再 delete 不影响原来的值
  • 练习题1
var str = 'abc';
str += 1; // 'abc1'
var test = typeof str; // 'String'
if(test.length == 6) { // true
    test.sign = 'typeof的结果可能为String'; // 原始值赋值后会自动销毁
}

console.log(test.sign); // undefined 
// 访问原始值的属性,会自动 new String() 调用包装类 然后再里面的值

  • 练习题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(); // 1
person1.say(); // 2

var person2 = new Person();
person2.say(); // 1

// 每次new 都是一个新的执行期上下文 互不影响

猜你喜欢

转载自blog.csdn.net/fanlixing6/article/details/85066552