面向对象不是一种语法,是一种编程的思想。
var obj = {};
var obj = new Object();
Object是一个系统提供的构造函数,这个构造函数专门用来创建对象使用的。
空对象不要紧,知道怎么往对象中添加属性就行
定义一个函数,调用函数,传入参数就可以得到对象。
function createObj(name,age,sex){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sex = sex;
return obj;
}
//传入参数就可以获得对象
var obj1 = createObj("张三",12,"男");
var obj2 = createObj("李四",13,"女");
var obj3 = createObj("王五",11,"女")
这种批量创建对象的函数,叫做工厂函数。
优点:可以同时创建多个对象
缺点:创建出来的类型,都是object类型的。无法精确看到对象类型
解决方案:自定义构造函数。其实相当于自己写一个函数,专门用来new对象。
根据固定的模板,创建一个对象,创建的对象有构造函数规定的属性和方法。
潜规则:构造函数的首字母需要大写
1.创建了一个新对象
2.this指向了这个新对象(新对象就有了属性,创建了属性)
3.执行构造函数,也就是调用了这个函数(给对象添加属性和方法,给属性和方法赋值)
4.返回这个新对象
function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
var obj1 = new Person("张三",12,"男");
var obj1 = new Person("李四",13,"女");
var obj1 = new Person("王五",11,"女");
构造函数的作用:
给对象添加属性和方法。
构造函数注意事项:
1.构造函数天生就是用来创建对象的,所以必须和new配合使用,否则就不具备创建对象的能力
2.构造函数内部不能有return关键字,因为构造函数会自动返回对象。如果返回基本数据类型,和不加效果一样,如果返回复杂数据类型,构造函数就没意义了。
3.如果new的时候,不需要参数,那么下括号可以省略
缺点
不同的对象应该由相同的方法,但是方法在内存中占用了多个空间-浪费
使用原型可以完美解决这个问题。
原型对象:在声明了一个函数之后,浏览器会自动按照一定的规则创建一个对象,通过函数的prototype可以访问到这个对象,这个对象就叫做原型对象。
在声明了一个函数后,这个构造函数(声明了的函数)中会有一个属性prototype,这个属性指向的就是这个构造函数(声明了的函数)对应的原型对象;原型对象中有一个属性constructor,这个属性指向的是这个构造函数(声明了的函数)
var obj = {
// name:"张三",
// age:12
// }
// console.log(obj);

1.任何一个对象,天生自带一个属性:__proto__ , 这个东西是一个对象,原型/原型对象;
console.log(obj.__proto__); obj.__proto__.sex = ‘美女‘; console.log(obj.__proto__);
function Person(){
}
var p = new Person();
Object.prototype.name = ‘李四‘;
Object.prototype.eat = function(){
// console.log("吃");
}
console.log(p); // 最小的对象
console.log(p.__proto__);
console.log(p.__proto__.__proto__);
console.log(p.__proto__.__proto__.constructor);
console.log(p.__proto__.__proto__.__proto__);

原文:https://www.cnblogs.com/bing-guo/p/13295811.html