JS基础知识整理 —— 对象

97 阅读2分钟
用已学到的知识点,描述一下你心目中的对象

var obj = {
    name: 'laura',
        age: '30',
    sayHello: function() {
        console.log("Hello, " + this.name);
    }
}
【属性的增、删、改、查】
增:(对象.属性)

obj.son
查:(对象.属性)

obj.name

改:(对象.属性 = 值)

obj.name = 'zz'
删:(delete 对象.属性)

delete obj.name

【对象的创建方法】
- 字面量(对象字面量/吃饭请假直接量)

var obj = {}

- 构造函数
  • 系统自带(Object()、Array()、Boolean()、Number()、Date())

var obj = new Object();obj.name = 'laura';obj.age = '30';


  • 自定义(大驼峰式命名规则,普通函数是小驼峰式——开发规范)

function Car(color) {
    this.color = color;
    this.name = 'BMW';
    this.height = '1400';
    this.lang = '4900';
    this.weight = 1000;
    this.health = 100;
    this.run = function() {
        this.health --;
    }
}
var car= new Car('red');
var car1= new Car('green');
//car,car1彼此独立

- Object.create(原型)方法

Object.create(prototype, definedProperty)

构造函数内部原理(new之后)
1)在函数体最前面隐式的加上this = {}
2)执行this.xxx = xxx
3)隐式的返回this

模拟构造函数
function Person(name, height) {
    var that = {};
    that.name = name;
    that.height = height;
    return that
}
var person = Person('zz',180);(这里直接按三段论创建了构造函数,所以可以不用再new了)
【注意】

function Person(name, height){
    this.name = name;
    this.height = height;
    return {}
}
var person = new Person('aa',180);
var person1 = new Person('bb',180);
==>因为上面重新显式的返回了空对象{},所以最后即使new吧,person和person1也还是空对象{}

function Person(name, height){
    this.name = name;
    this.height = height;
    return 123
}
var person = new Person('aa',180);
var person1 = new Person('bb',180);
==>虽然上面显式的返回了123,对new之后的结果没有影响,person和person1还是对象{}(浏览器默认只要是new的构造函数,一律返回的是对象,即使显式返回原始值也没有用)


【包装类】
(原始值数字、原始值字符串。。。,原始值不能设置属性和方法)

var num = new Number(123),这种是构造函数对象123了,可以有属性和方法,也可以像数字那样进行运算
var str= new String('abc'),这种是字符串函数对象abc了,可以有属性和方法
var bol = new Boolean(false);

为什么有些原始值可以设置属性方法(如字符串对象、数字对象、布尔对象等),是因为有包装类

var num = 4;
num.len = 3; //new Number(4).len = 3; delete,是因为经过了包装类,然后又删掉了
num.len; // undefined(因为删掉了,所以访问的时候又没有len了)

var str = 'abcd';
str.length = 2; // new String('abcd').length = 2; delete
str; //abcd
str.length; // 4(new String('abcd').length,字符串也有自带length属性)