面向对象

面向对象
1.什么是对象?
对象概念:具有属性和方法,特指的某一个事物。
* 没有对象怎么办?new一个
* 所有的实例对象都有一个对应的构造函数(包括DOM实例对象)
一般情况下,真正的数据存储在实例对象中,而不是构造函数。
对象的创建:方式三种
* 1.调用系统的构造函数创建对象
* //第一种
var stu=new Object();
stu.name="小白";
stu.age=18;
stu.eat=function(){
console.log("我喜欢。。。");
}
console.log(stu.name);
console.log(stu.age);
* 2.调用自定义构造函数创建对象
function student(age,name,sex){
this.name=name;
this.age=age;
this.sex=sex;
this.sayhi=function(){
console.log("我叫"+this.name+",我今年:"+this.age);
};
};
//创建学生对象
var stu=new student(12,"小白","男");
stu.sayhi();
* 3.使用字面量方式创建对象
var obj={
name: "小白",
age: 18,
sex: "男",
sayHello: function () {
console.log("我是" + this.name + "我是:" + this.sex + "人");
}
}

var obj = {};
obj.name = '张三';
obj.age = 12;

// 工厂(用来生产实例对象)
function factory(name,age){
// var obj = new Object();
// var obj = new Object;//如果构造函数不需要传递参数,那么实例化时可以省略括号
var obj = {};
obj.name = name;
obj.age = age;
return obj;
}

var o1 = factory('tom',12);
var o2 = factory('jerry',13);
console.log(o1 == o2);//false
2. 对象实例化本质:
1、浏览器根据构造函数在内存中开辟一块内存
2、浏览器会给上面产生的内存起一个名字this(本质上就是内存地址)
3、通过this给这块内存添加数据
4、把this返回给一个变量
3. 构造函数的返回值问题:
1、默认情况下构造函数的返回值是this,
2、如果给构造函数显示的返回一个基本类型的数据,那么和不返回的效果一样
3、如果给构造函数显示的返回一个引用类型,那么就以此为准,就不会返回默认 的this
4.原型
1. 原型prototype
原型prototype是构造函数的属性,本质上是对象(可以理解成Object的实 例对象:new Object()或者{})
prototype的主要作用:1、数据共享(实例对象共享数据);2、实现继承
原型中的所有数据是被所有的实例对象共享的、
2、原型链
所有的构造函数中都有一个原型属性prototype,本质上该属性就是对象(Object的实例对象)
原型对象中默认有一个属性constructor,该属性指向原型所属的构造函数
所有的实例对象中都有一个__proto__属性,该属性也指向构造函数的原型 对象,注意:__proto__属性不可以在编程中使用,该属性不是标准属性,实际 上该属性是浏览器内部自己使用的
3. 构造函数、实例对象、原型对象三者之间的关系:
1、构造函数都有原型属性prototype
2、实例对象都有__proto__属性
3、原型中都有constructor属性
5. 对象属性的判断及方法的介绍
1、hasOwnProperty(),该方法位于Object.prototype
2、in 判断某个属性是否在构造函数或者原型链上

posted @ 2017-05-08 21:30  super_素素  阅读(134)  评论(0编辑  收藏  举报