对象的声明
1.声明对象的方式: 字面量赋值
var person = {
name: 'xiaoming',
age: 13,
}
2.构造函数的方式: 自定义的构造函数 Object 构造函数
function student(name) {
this.name = name;
this.listen = function() {
console.log(this.name + "在听课")
}
}
var t = teacher('nitong');
var xiaohong = new student('xiaohong');
var xiaoming = new student('xiaoming');
xiaohong.listen();
xiaoming.listen();
console.log(xiaohong instanceof student);
console.log(xiaoming instanceof student);
console.log(t instanceof teacher);//false
/**
*function student(name) {}
* name => xiaoming;
* this = {};
* this.name = 'xiaoming';
*
* return this;
*/
console.log(xiaohong);
console.log(xiaoming);
3.工厂模式
function teacher(name) {
var obj = new Object();
obj.name = name;
return obj;
}
4.原型模式
// 函数 是第一等公民 length : 描述该方法形式参数的个数
// prototype ---> 对象 {} 称之为原型对象
// prototype constructor ---> 指向当前的函数本体
// 函数内部 arguments.callee ---> 指向当前函数本体
function person(name, age) {
this.name = name;
this.age = age;
}
person.prototype.hello = "加油";
person.prototype.sayhi = function() {
console.log(this.name + "hello");
}
console.log(person.prototype.constructor === person);
var p1 = new person('xiaoming',20);
var p2 = new person('xiaohong',22);
console.log(p1.name);
console.log(p1.age);
console.log(p1.hello);
p1.sayhi();
console.log("--------------")
console.log(p2.name);
console.log(p2.age);
console.log(p2.hello);
p2.sayhi();
//原型链 :JS 在创建对象的时候,要求每一个对象都有一个原型属性
// 对象 原型属性 proto
// 对于我们的函数 prototype
// 这两个之间有什么关系
// 由构造函数 person 创建出来的 对象 P p.__proto__ === person.prototype
// 获取某个对象的某个属性,如果当前对象中没有这个属性,就会到该对象的原型属性对象中寻找,
// 原型对象如果还没有,找原型对象的原型对象。从而形成了一个链条
// 直到找到 Object.prototype === null.
// 对象属性的遍历 for-in 遍历对象中的属性值
5.遍历和删除
delete p1.name;
delete p1.age;
delete p1.hello;
delete p1.sayhi;
for(var i in p1) {
console.log(i); //属性
console.log(p1[i]) //属性值
}