欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 前端技术 > javascript >内容正文

javascript

javascript面向对象5

发布时间:2025/3/8 javascript 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 javascript面向对象5 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
类变量/类方法/实例变量/实例方法        js中,所有的方法都有一个call方法和apply方法,这两个方法可以模拟对象调用方法。它的第一个参数是对象,后面的参数表示对象调用这个方法时的参数。比如,我们定义了一个方法f(),然后调用下面的语句:        f.call(0,1,2);        作用相当于:        o.m = f;        o.m(1,2);        delete o.m;        举个例子:        JS代码:(见附件test1.html)        //定义方法        function Person(name,age){               this.name = name;               this.age = age;        }

 

       //空对象        var o = new Object();        //undefined_undefined        alert(o.name + "_" + o.age);

 

       //相当于调用o.person("wangsy",31);        Person.call(o,"wangsy",31);        //wangsy_31        alert(o.name + "_" + o.age);        //apply方法作用同call,不同之处在于传递参数的形式是用数组来传递        Person.apply(o,["wangsy",31]);        //wangsy_31        alert(o.name + "_" + o.age);

 

       实例变量和实例方法都是通过实例对象加”.”操作符然后跟上属性名或方法来访问的,但是我们也可以为类来设置方法或变量。这样就可以直接用类名加”.”操作符然后跟上属性名或方法来访问。定义类属性和类方法很简单。        JS代码:(见附件test2.html)        //定义类变量,创建的Person实例的个数        Person.counter = 0;        //定义方法        function Person(name,age){               this.name = name;               this.age = age;               //每创建一个实例,类变量加1               Person.counter++;        }

 

       //类方法,判断谁的年龄较大        Person.whoIsOlder = function(p1,p2){               if (p1.age > p2.age)               {                      return p1;               }else{                      return p2;               }        }

 

       var p1 = new Person("p1",18);        var p2 = new Person("p2",22);        //现在有2个人        alert("现在有" + Person.counter + "个人");        var p = Person.whoIsOlder(p1,p2);        alert(p.name + "的年龄较大");

 

prototype属性的应用:        假设定义了一个Circle类,有一个radisu属性和area方法,实现如下:        JS代码:(见附件test3.html)               function Circle(radius){               this.radius = radius;               this.area = function(){                      return 3.14 * this.radius * this.radius;               }        }

 

       var c = new Circle(1);        //3.14        alert(c.area());

 

       假设我们定义了100Circle类的实例对象,那么每个实例对象都有一个radius属性和area方法,实际上除了radius属性,每个Circle类的实例对象的area方法都是一样的,可以把area方法抽出来定义在Circle类的prototype属性中,这样所有的实例对象就可以调用这个方法,从而节省空间。        JS代码:(见附件test4.html)        function Circle(radius){               this.radius = radius;        }

 

       Circle.prototype.area = function(){               return 3.14 * this.radius * this.radius;        }

 

       var c = new Circle(1);        //3.14        alert(c.area());

 

       现在,我们用prototype属性来模拟一下类的继承:首先定义一个Circle类作为父类,然后定义了子类PositionCircle        JS代码:(见附件test5.html)        //定义父类Circle        function Circle(radius){               this.radius = radius;        }

 

       Circle.prototype.area = function(){               //定义父类的方法area计算面积               return 3.14 * this.radius * this.radius;        }

 

       //定义PositionCircle        function PositionCircle(x,y,radius){               //属性横坐标               this.x = x;               //属性纵坐标               this.y = y;               //调用父类的方法,相当于调用this.Circle(radius)               //设置PositionCircle类的radius属性               Circle.call(this,radius);        }        //设置PositionCircle的父类为Circle        PositionCircle.prototype = new Circle();

 

       var pc = new PositionCircle(1,2,1);        //1        alert(pc.radius);        //Circle        alert(pc.constructor);

 

       PositionCircle.prototype.constructor = PositionCircle;        //PositionCircle        alert(pc.constructor);

转载于:https://blog.51cto.com/jawsy/167226

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的javascript面向对象5的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。