码迷,mamicode.com
首页 > 其他好文 > 详细

对象继承方式

时间:2015-06-22 22:16:22      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">

  <title>对象继承</title>
 </head>
 <body>
  <script>
  /*
         function Person(name, age){
            this.name = name;
            this.age = age;
            this.say = function(){
                alert("我的名字是" + this.name);
            }
        }

        function Student(name,id){
            this.temp = Person; //临时属性方式,对象冒充
            this.temp(name);
            //delete this.temp;
            this.id = id;
            this.showId = function(){
                alert(‘我是学生,我的学号是:‘ + this.id);
            }
        }

        var stu = new Student(‘zhangsan‘,‘001‘);
        stu.say();
        stu.showId();
    */
    //*****************************************************
        /*function Person(name, age){
            this.name = name;
            this.age = age;
            this.say = function(){
                alert("我的名字是" + this.name);
            }
        }

        function Student(name,id){
            Person.call(this,name);//call方式实现对象冒充
            //Person.apply(this,new Array(name)); //apply方式实现冒充
            this.id = id;
            this.showId = function(){
                alert(‘我是学生,我的学号是:‘ + this.id);
            }
        }

        var stu = new Student(‘zhangsan‘,‘001‘);
        stu.say();
        stu.showId();
        */
        /*
        在OO概念中,new实例化后,对象就在堆内存中形成了自己的空间,值得注意的是,这个代码段。而成员方法就是存在这个代码段的,并且方法是共用的。问题就在这里,通过对象冒充方式继承时,所有的成员方法都是指向this的,也就是说new之后,每个实例将都会拥有这个成员方法,并不是共用的,这就造成了大量的内存浪费。并且通过对象冒充的方式,无法继承通过prototype方式定义的变量和方法,如以下代码将会出错:*/
        //***************************************
        /*function Person(name){
            this.name = name;
            this.say = function(){
                alert("我的名字是" + this.name);
            }
        }
        Person.prototype.age = 20;
        Person.prototype.sayAge = function(){
                alert(‘我的年龄是:‘ + this.age);
            }

        function Student(name,id){
            //Person.call(this, age);
            Person.apply(this, new Array(age));
            this.id = id;
            
            this.showId = function(){
                alert(‘我是学生,我的学号是:‘ + this.id);
            }
        }

        var stu = new Student(‘zhangsan‘,‘001‘);
        stu.sayAge(); //报错age 未定义
        //stu.showId();
        */
        //*********************************************************
        //原型继承方式:此方法实现有缺陷,就是实例化子类时不能把参数传给父类,function Person()没有参数。
        /*
            function Person(){
            this.name = ‘wangwu‘;
            
        }
        Person.prototype.say = function(){
            alert(‘my name is :‘ + this.name);
        }

        function Student(id){
            this.id = id;
            this.showId = function(){
                alert(‘I am a student,my NO is:‘ + this.id);
            }
        }
        Student.prototype = new Person();

        var stu = new Student(‘001‘);
        stu.say();//zhangsan
        stu.showId();
        alert(stu.hasOwnProperty(‘id‘));
        */
        //*******************************************************
        //好的继承方式是,成员变量用对象冒充,成员方法用原型继承
        function Person(name){
            this.name = name;
            
        }
        Person.prototype.say = function(){
            alert(my name is : + this.name);
        }

        function Student(name,id){
            Person.call(this, name);
            this.id = id;
            this.showId = function(){
                alert(I am a student,my NO is: + this.id);
            }
        }
        Student.prototype = new Person(wangwu);

        var stu = new Student(zhangsan,001);
        stu.say();//zhangsan
        stu.showId();
        alert(stu.hasOwnProperty(id));
        
  </script>
 </body>
</html>

 

对象继承方式

标签:

原文地址:http://www.cnblogs.com/double405/p/4593895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!