面向对象总结 ---逆战班1

1. 编程思想

	面向过程(POP):更加注重过程,分布执行;分析解决问题所需要的步骤,依次执行,先具体,再整体
	面向对象(OOP):关注的是整体,按照模块执行;把构成问题的事务分解成对象,描述这些对象的行为,先整体,再具体

2. 创建方式

1.字面量创建

			var stu1 = {
			            name:"li",
			            age:18,
			            sayHallo:function (){
			                console.log(this.name);
			            }
			        }

缺点:代码冗余

2.借助内置构造函数创建

			var stu1 = new Object();
			        stu1.name = "caicai";
			        stu1.age = 20;
			        stu1.sayHello = function(){
			            console.log(this.name);
			        }

缺点:代码冗余

3.通过工厂函数创建

			function createObj(name,age){
			         var obj = new Object();
			             obj.name = name;   //属性
			             obj.age = age;
			             obj.sayHello = function(){     //方法
			                 console.log(obj.name); 
			             }
			             return obj;
			     }
			     var stu1 = createObj("cai",22);
			     var stu2 = createObj("xu",21);

缺点:无法判断对象所属哪个类

4.构造函数方式创建

			function Person(name,age){  //构造函数
			            //添加两个属性 一个方法
			            this.name = name;
			            this.age = age;
			            this.sayHello = function(){
			                console.log(this.name);
			            }
			        }
			        // 创建两个实例
			        var person1=new Person("john1",21);
			        var person2=new Person("john2",22);

构造函数运行机制

1.创建一个新对象
2.改变this指向(指向新对象)
3.执行构造函数里的代码
4.返回这个新对象

5.组合创建

属性放在构造函数里,方法放在原型对象里

        function Person(name,age){
            this.name = name;
            this.age = age;
        }
        Person.prototype.sayHello = function(){ //原型方法
            console.log(this.name);//this也是指向实例
        }

        var person1 = new Person("john1",21);
        var person2 = new Person("john2",22);

3. 原型对象

原型对象:每个函数都有的一个属性 prototype
原型对象上的属性和方法都能被实例所访问

		function Person(){
			
			        }
			        //给原型对象添加属性和方法
			        Person.prototype.name = "kk";
			        Person.prototype.age = 20;
			        Person.prototype.sayHello = function(){
			            console.log(this.name);
			        }
			
			        var person1 = new Person();
			        var person2 = new Person();

constructor属性:原型对象的默认属性,用来引用它的函数对象

function Foo(){
        }
        console.log(Foo.prototype);
        console.log(Foo.prototype.constructor);

4. 原型链

每一个构造函数都有一个原型对象,每一个原型对象上都有一个指向构造函数的指针(constructor),每一个实例上有指向这个原型对象的内部指针__proto__,原型对象上的属性和方法能被实例所访问到

        function FnA(){
            this.a = "aa";
        }


        function FnB(){
            this.b = "bb";
        }


        function FnC(){
            this.c = "cc";
        }

        FnB.prototype = new FnC();  //让FnB原型对象具有c属性
        var fb = new FnB();
        console.log(fb.c);//cc
        FnA.prototype = new FnB();//让FnA原型对象里具有b属性
        var fa = new FnA();
        console.log(fa.b);
        console.log(fa.c);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值