JS面向对象的方法

面向对象

(1)、JavaScript对每个创建的对象都会自动设置一个原型(谷歌火狐中是proto),指向它的原型对象prototype;

function person() {}
//那么person的原型链就是:
person(proto) > Function.prototype(proto) > Object.prototype
//所以最终的结果都是指向原型对象,就称为面向对象

面向对象的方法

1、工厂模式—本质就是在函数中创建一个对象,每次调用时候传入不同的参数,然后返回这个对象

   //工厂模式
        function show(name, age) {
            //创建对象
            var obj = new Object();
            obj.name = name;
            obj.age = age;

            obj.say = function () {
                console.log(this.name + "在说话。。。");
            }

            return obj;//返回这个对象
        }
        var stu = show("万物", 23);
        stu.say();


        // 工厂模式
        function Person(name, age) {
            var p = {};//创建一个对象
            p.name = name;
            p.age = age;
            p.say = function () {
                console.log("hello " + this.name);
            }
            return p;//返回这个对象
        }

        var p1 = Person('王五', 24);
        console.log(p1);//{name:"王五",age:"24",say:f}
        console.log(p1.say());//hello 王五

        var p2 = Person('XX', 25);
        console.log(p2);//{name:"XX",age:"25",say:f}
        console.log(p2.say());//hello XX

2、构造函数模式—跟工厂模式的区别就是函数中用this指代对象也不用return了,还有一个区别就是创建对象的时候是new一个对象

  // 构造函数模式
        function Pers(name, age, addr) {
            this.name = name;
            this.age = age;
            this.addr = addr;

            this.walk = function () {
                console.log(this.name + "在走路。。。。")
            }
        }
        var str1 = new Pers("jack", 23, "开封");
        str1.walk();

        // 构造函数模式
        function Person(name, age) {
            this.name = name;
            this.age = age;
            this.say = function () {
                console.log("hello " + this.name);
            }
        }

        var p1 = new Person('王五', 24);
        console.log(p1);//Person {name:"王五",age:"24",say:f}
        console.log(p1.say());//hello 王五

        var p2 = new Person('XX', 25);
        console.log(p2);//Person {name:"XX",age:"25",say:f}
        console.log(p2.say());//hello XX

3、原型方法,就是通过创建一个Function然后在function.prototype上添加属性和方法,再new一个Function这种方式创建一个对象。

 //原型模式
        var stu = new Object();//创建没对象
        stu.name = "jack";
        stu.age = 23;

        stu.say = function () {
            console.log(this.name + "在说话。。。。。");
        }
        stu.walk = function () {
            console.log(this.name + "在走路。。。。。");
        }
        stu.say();
        stu.walk();

4、混合模式(原型加构造函数的模式)— 就是把实例的属性写在构造函数里面,每个实例共享的属性和方法写在原型里面。那么什么是实例的属性呢?就是通过new一个函数都会有的属性就是实例的属性,它们互不影响各自独立。那么什么是共享的属性和方法呢?就是prototype里面如果有sing这个方法,那么new两个实例后都会有sing这个实例的方法。那么问题来了new两个实例之后构造函数里面的属性不是也是都会有的吗?所以区别就是prototype里面的属性和方法是不独立的,不管new多少个实例,prototype始终指向的地址都是同一个,也就有了面向对象的省内存,不浪费资源的优点。好直接上代码

   //构造函数里面写上实例的属性和方法
        function Person(name, age, addr) {
            this.name = name;
            this.age = age;
            this.adtdr = addr;
        }
         //原型上写共享的属性和方法
        Person.prototype.walk = function () {
            console.log(this.name + "在走路。。。。。。");
        }


        var stu = new Person("王五", 23, "郑州");
        stu.walk();





        //构造函数里面写上实例的属性和方法
        function Person(name, age) {
            this.name = name;
            this.age = age;
            this.say = function () {
                console.log("hello " + this.name);
            }
        }
        //原型上写共享的属性和方法
        Person.prototype.sing = function () {
            console.log("Hi " + this.name);
        }
        //或者这么写
        /*Person.prototype={
            constructor:Person,
            sing:function() {
                console.log("Hi "+this.name);
            }
       }*/

        var p1 = new Person('王五', 24);
        console.log(p1);//Person {name:"王五",age:"24",say:f}
        console.log(p1.say());//hello 王五
        console.log(p1.sing());//Hi 王五

5、josn的用法
(1)、Json组成
Var json = {“aaa”: 1,“bbb”: 2,“ccc”: 3,“ddd”: 4}
Json由{}和key:value以及逗号组成,三部分。(只有一个键值对key:value时,可以没有逗号)

(2)、json是一种与语言无关的数据交换的格式,作用:

1.使用ajax进行前后台数据交换

2.移动端与服务端的数据交换

(3)、Json的格式与解析

json有两种格式:

1)对象格式:{“key1”:value,“key2”:value,“key3”:value…}

2)数组/集合格式:[obj,obj,obj…]

例如:user对象 用json数据格式表示(user对象里面有4个属性)

{“username”:“zhangsan”,“age”:28,“password”:“123”,“addr”:“北京”}

List 用json数据格式表示(集合里面有3个paoduct对象)

[{“pid”:“10”,“pname”:“小米4C”},{},{}]

注意:对象格式和数组格式可以互相嵌套

  json的key是字符串  json的value是Object(json的值可以为函数)

json的解析:

json是js的原生内容,也就意味着js可以直接取出json对象中的数据

var person = {"firstname":"张","lastname":"三丰","age":100};
  //取出lastname
  alert(person.lastname);
  //取出age
  alert(person.age);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值