zoukankan      html  css  js  c++  java
  • JS 面向对象

    <script>
        //1.使用new Object()方式定义
        var person1 = new Object();
        person1.name = '张三';
        person1.age = 24;
        person1.gender = "male";
        person1.introduceSelf = function () {
            alert("我的名字是:"+this.name+"
    "+"年龄:"+this.age+"
    性别:"+this.gender);
        }
        alert(person.name)
        person.introduceSelf();
    
        //使用字面量定义对象
        var person2 = {
            name : "zhangsan",
            age : 25,
            gender : "female",
            introduceSelf : function () {
                alert("我的名字是:"+this.name+"
    "+"年龄:"+this.age+"
    性别:"+this.gender);
            }
        }
        alert(person2.gender)
        person2.introduceSelf();
    
        //创建对象的几种方式
        //1. 工厂模式: 用函数封装以特定的接口创建对象的细节
        function createPerson(name, age, gender) {
            var person = new Object();
            person.age = age;
            person.name = name;
            person.gender = gender;
    
            person.introduceSelf= function () {
                alert("我的名字是:"+this.name+"
    "+"年龄:"+this.age+"
    性别:"+this.gender);
            }
            return person;
        }
    
        var p1 = createPerson("lisi",18,"女");
        var p2 = createPerson("貂蝉",16,"female");
        p1.introduceSelf();
        p2.introduceSelf();
    
        //2. 构造函数模式 (系统自动帮我们创建了 var this = new Object(); 和return this;)
        //缺点:每个方法都要在每个实例上调用重新创建一遍
        function Person(name, age, gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;
            this.introduceSelf = function () {
                alert("我的名字是:"+this.name+"
    "+"年龄:"+this.age+"
    性别:"+this.gender);
            }
        }
        var p3 = new Person("小乔",15,"妹纸");
        var p4 = new Person("如花", 28, "汉子");
        p3.introduceSelf();
        p4.introduceSelf();
    
        //3. 原型模式 , 让对象实例共享它所包含的属性和方法
        function Person() {
        }
        Person.prototype.name = "甘宁";
        Person.prototype.age = "55";
        Person.prototype.gender = "猛男";
        Person.prototype.introduceSelf = function () {
            alert("我的名字是:"+this.name+"
    "+"年龄:"+this.age+"
    性别:"+this.gender);
        }
    
        var p5 = new Person();
        var p6 = new Person();
        p5.introduceSelf();
        p5.name = "关羽";
        p5.introduceSelf();//甘宁变成了关羽
        alert(p5.hasOwnProperty("gender"))//false   来自实例返回True 来自原型返回false
        alert("gender" in p5)//true
    
        //如何判断属性来自原型?
        // /if(!obj.hasOwnProperty() && name in obj) name要求是字符串形式
    
        // 3.1 简单的原型模型语法
        function Person() {
        }
        Person.prototype = {
            constructor : Person,
            name : "赵飞燕",
            age : 15,
            gender : "女",
            introduceSelf : function () {
                alert("我的名字是:"+this.name+"
    "+"年龄:"+this.age+"
    性别:"+this.gender);
            }
        }
        var p7 = new Person();
        p7.introduceSelf();
        p7.name = "金莲";
        p7.introduceSelf();//名字改变了
    
        //4. 组合模式 构造函数定义对象的属性(可变), 原型模型定义成员方法(不变通用) 推荐!!!!
        function Person(name, age, gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;
        }
    
        Person.prototype = {
            constructor : Person,
            introduceSelf : function () {
                alert("我的名字是:"+this.name+"
    "+"年龄:"+this.age+"
    性别:"+this.gender);
            }
        }
        var p8 = new Person("宝钗", 20, "妹纸");
        var p9 = new Person("黛玉", 19, "妹纸");
        p8.introduceSelf();
        p9.introduceSelf();
    

     2.继承

    <script>
        // 继承的核心就是 CALL方法
    //1.子类继承
        function Animal() {
            this.colors = ['red','blue','green'];
        }
        function Dog() {
            Animal.call(this);// 子类构造函数中调用父类的构造函数
        }
    
        var animal = new Animal();
        var dog = new Dog();
        animal.colors.push('black');
        alert(animal.colors); // 'red','blue','greed','black'
        alert("dog:"+ dog.colors); //'red','blue','green'
    
    
    //2. 组合继承 :原型链对原型属性和方法继承;构造函数模式实现对实例的属性
        function Animal(name) {
            this.name = name;
            this.colors = ['red','blue','green'];
        }
        Animal.prototype.introduceSelf = function () {
            alert(this.name);
        }
    
        function Cat(name, age) {
            Animal.call(this, name);//调用父类Animal的构造函数,实现实例属性的继承
            this.age = age;
        }
    
        //子类继承父类的方法和属性
        Cat.prototype =  new Animal();//为什么不带参数name
        Cat.prototype.sayAge = function () {
            alert(this.age);
        }
    
        var cat = new Cat("武则天", 68);
        cat.colors.push("yellow");
        alert(cat.colors);
        cat.introduceSelf();
        cat.sayAge();
    </script>
    
  • 相关阅读:
    详解Java API之正则表达式
    ios UIWindow 错误使用导致无法接收motionEnded(摇一摇)函数
    ios NSTimer的强引用问题
    ionic 接触的第一个Hybrid项目
    iOS 小经验:UIAnimation空对象导致crash
    iOS GCD 必读推荐,有关于单例使用问题
    ios NSString 转 float的注意
    iOS UIViewController 和 nib 相关的3个方法
    ios delegate 使用注意 assign,weak
    ios 使用autolayout 后button 的frame 无法设置问题!
  • 原文地址:https://www.cnblogs.com/bravolove/p/5945708.html
Copyright © 2011-2022 走看看