一、对象的创建方法
题外话:
java c++ 同样能生产出对象,但是是死的
JavaScript 生产出的对象是活的,更像是人的生长过程,后天可以增加和删除方法
用字面量创建
var obj = {};
二、对象的增删改
- 增
let obj = {
};
obj.name = '张三';
obj.age = 18;
- 删
delete obj.age;
一旦经历了
var
的操作,所得出的属性,window
,这种的属性叫做不可配置的属性。不可配置的属性delete
不掉
var a = 'abc';
a.name = 'mary';
console.log(a.name); // undefined
- 改
obj.name = '李四';
二、构造函数
- 系统自带的构造函数
new Object()
Object
就像一个对象工厂一样,执行一次生成一个对象,
并且每一次生成的对象都是一模一样且独一无二的
-
自定义的
-
Object.create(prototype)
var obj = new Object(); --> var obj = {};
// 可以灵活地往里面添加东西
obj.name = '张三';
obj.age = 18;
obj.sex = 'male';
// 删除东西
delete obj.sex;
// 构造函数
function Person() {
}
// 必须加 new 操作符,构造函数必须遵循大驼峰式命名规则(首字母大写)-- TheFirstName
// 小驼峰式 -- theFirstName
var person = new Person();
用字面量创建对象和用构造函数创建对象的结果是一样的
var obj = {};
var obj1 = new Object();
// 在控制台打开里面的东西都是一样的 ⇒ 因为要经过包装类
三、构造函数的内部原理
构造函数三部曲
- 在函数体最前面隐式加上
this = {}
- 执行
this.xxx = xxx
- 隐式的返回
this
对象
有了
new
关键字之后,就能让普通函数拥有构造函数的功能
function Student(name, age, sex) {
// 1. 在函数体的最前面隐式添加一个 this 对象
// var this = {
// name : '',
// age : '',
// sex : ''
// }
// 2. 执行 this.xxx = xxx
this.name = name;
this.age = age;
this.sex = sex;
// 3. 隐式返回 this 对象
// return this;
}
var student = new Student('张三', 18, 'male'); // 用一个变量接收一下
模拟构造函数
function Person(name, height) {
var that = {};
that.name = name;
that.height = height;
return that;
}
// 只要加了 new 关键字,就会让上面的函数的返回值强制变成一个对象
var person = Person('张三', 180);
- 对象实例化:
new
一个对象 - 对象实例化只有得到的每一个对象叫实例 – 对象
person
是 构造函数Person
的一个实例
检测某个实例是不是某个构造函数所构造出来的 ⇒ 构造函数.prototype.isPrototypeOf(实例)
Person.prototype.isPrototypeOf(person); // true
返回某个实例的原型 ⇒ Object.getPrototypeOf(实例)
Object.getPrototypeOf(person); // 返回 person 的原型对象 --- {construcotr:...}