js面向对象学习

@{
    Layout = null;
}


<!DOCTYPE html>


<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script>
        1、命名空间注册工具类
        var Namespase = Namespase || {};
        Namespase.register = function(path) {
            var arr = path.split(".");
            var ns = "";
            for (var i = 0; i < arr.length; i++) {
                if (i > 0) {
                    ns += ".";
                }
                ns += arr[i];
                eval("if (typeof(" + ns + ") === 'undefined')" + ns + "= new Object();");
            }
        }
        2、注册命名空间 com.cjm.ui
        Namespase.register("com.cy.ui");
        3、使用命名空间
        com.cy.ui.Person = function(name) {
            this.SayHi = function() {
                console.log("hi:" + name);
            }
        }


        var p = new com.cy.ui.Person("Cy1");
        //p.SayHi();


        com.cy.ui.Student = function(name, age) {
            com.cy.ui.Person.call(this, name);
            this.Word = function() {
                console.log("age:" + age);
            }
        }
        var stu = new com.cy.ui.Student("Cy", 18);
        stu.SayHi();
        stu.Word();


        /* -- 类式继承 -- */
        //先声明一个超类


        function Person(name) {
            this.name = name;
        }


//给这个超类的原型对象上添加方法 getName 
        Person.prototype.getName = function() {
            return this.name;
        }
        //实例化这个超
        var a = new Person('Darren1');
        console.log(a.getName()); //Darren1


        //再声明类


        function Programmer(name, sex) {
            //这个类中要调用超类Person的构造函数,并将参数name传给它
            Person.call(this, name);
            this.sex = sex;
        }


//这个子类的原型对象等于超类的实例
        Programmer.prototype = new Person();
        //因为子类的原型对象等于超类的实例,所以prototype.constructor这个方法也等于超类构造函数,你可以自己测试一下,如果没这一步,console.log(Programmer.prototype.constructor这个是Person超类的引用,所以要从新赋值为自己本身
        console.log(Programmer.prototype.constructor);
        /*function Person(name) {
        this.name = name;
        } */


        Programmer.prototype.constructor = Programmer;
        console.log(Programmer.prototype.constructor);


        /*function Programmer(name, sex) {
        Person.call(this, name);
        this.sex = sex;
        } 
        */
        //子类本身添加了getSex 方法
        Programmer.prototype.getSex = function() {
            return this.sex;
        }
        //实例化这个子类
        var _m = new Programmer('Darren2', 'male');
        //自身的方法
        console.log(_m.getSex()); //male
        //继承超类的方法
        console.log(_m.getName()); //Darren2




/* -- 原型式继承 -- */
        //clone()函数用来创建新的类Person对象
        var clone = function(obj) {
            var _f = function() {};
            //这句是原型式继承最核心的地方,函数的原型对象为对象字面量
            _f.prototype = obj;
            return new _f;
        }
        //先声明一个对象字面量
        var Person = {
            name: 'Darren',
            getName: function() {
                return this.name;
            }
        }
        //不需要定义一个Person的子类,只要执行一次克隆即可
        var Programmer = clone(Person);
        //可以直接获得Person提供的默认值,也可以添加或者修改属性和方法
        //alert(Programmer.getName());
        Programmer.name = 'Darren2';
        //alert(Programmer.getName());


        //声明子类,执行一次克隆即可
        var Someone = clone(Programmer);




        function fun(name) {
            this.name = name;
            console.log(name);
        }


        var obj = new Object();
        fun.call(obj,"Cy");
        console.log(obj.name);


    </script>
</head>
<body>
    <div>
        
    </div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ycmail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值