Javascript 面向对象(转)
程序员文章站
2022-06-09 15:55:42
...
神马是对象??
客观世界中,万物皆为对象;
对象就是一MM,她有她独特的性格以及行为。所以对象=属性+行为。
神马是面向对象???
吃这行饭的人都知道,面向对象它是一种思维方式,而不是一种工具。到目前为止不管是多NB的人也没有给出一个确切的定义,因为它本来就没有一个标准,得靠大家在工作中去体会。
个人认为面向对象就是先使用抽取事物的共性,分离其特性的手法,然后再使用封装、继承、多态等设计方法整合各模块,以达到客户要求,就是面向对象。
js虽然不是面向对象的语言,但他依然可以使用面向对象的思想来编程。
命名空间
在开发的后期,命名空间是必不可少的,它可以解决几乎所有的命冲突。
在function 未使用var声明的变量为全局变量,全局变量为window对象下的属性,一般情况下,尽量不要使用全局变量,全局变量是魔鬼,它随时会让你奔溃。
this关键字永远都指向函数的所有者
类
是面向对象的基本要素,它是具有相同属性和服务的一组对象的组合,是对事物抽象出来的结果。
一般来说,一个类包含有属性,方法,如下
类的继承:
如果B类继承A类,那么B类拥有A类的属性以及方法,而且还可以扩展自己的属性和方法。
下面新建一个User类,它继承Person类。
类的多态
多态是子类再继承父类的时候,重新实现父类的某个方法,重载的时候,方法名必须相同,参数可不同。
下面还是以User类为例,重载父类的say()方法。
那么在重载父类的方法时,如何实现像Java 跟AS3.0一样的super()方法呢?
客观世界中,万物皆为对象;
对象就是一MM,她有她独特的性格以及行为。所以对象=属性+行为。
var Person = { age: 0, name: 'MM', say: function(){ alert(this.name + ': 你妈喊你吃饭!'); } };
神马是面向对象???
吃这行饭的人都知道,面向对象它是一种思维方式,而不是一种工具。到目前为止不管是多NB的人也没有给出一个确切的定义,因为它本来就没有一个标准,得靠大家在工作中去体会。
个人认为面向对象就是先使用抽取事物的共性,分离其特性的手法,然后再使用封装、继承、多态等设计方法整合各模块,以达到客户要求,就是面向对象。
js虽然不是面向对象的语言,但他依然可以使用面向对象的思想来编程。
命名空间
在开发的后期,命名空间是必不可少的,它可以解决几乎所有的命冲突。
在function 未使用var声明的变量为全局变量,全局变量为window对象下的属性,一般情况下,尽量不要使用全局变量,全局变量是魔鬼,它随时会让你奔溃。
this关键字永远都指向函数的所有者
var Space = function(){ this.i=10;//Space 的i i = 300;//window 的i this.fn = function(){ var i=20;//fn函数的i } }; var space = new Space(); alert('space I: ' + space.i); alert('window I: ' + window.i);
类
是面向对象的基本要素,它是具有相同属性和服务的一组对象的组合,是对事物抽象出来的结果。
一般来说,一个类包含有属性,方法,如下
var Person = function(){ this.firstName = ''; //属性 this.lastName = ''; //属性 this.address = ''; //属性 this.birthDate = ''; //属性 this.age = 0; //属性 this.phone = ''; //属性 this.say = function(){ //方法 alert(this.firstName + ': 你妈喊你吃饭!'); }; };
类的继承:
如果B类继承A类,那么B类拥有A类的属性以及方法,而且还可以扩展自己的属性和方法。
下面新建一个User类,它继承Person类。
var User = function(){ this.money = 100; //扩展User属性 this.buy = function() //扩展User方法 { alert(this.firstName + ': 购买一条老底,共' + this.money + '元。' ); }; }; User.prototype = new Person(); //原行继承方式Person对象做为User的原型。 var user = new User(); user.firstName = 'Lang'; user.buy();
类的多态
多态是子类再继承父类的时候,重新实现父类的某个方法,重载的时候,方法名必须相同,参数可不同。
下面还是以User类为例,重载父类的say()方法。
var User = function(){ this.money = 100; //扩展User属性 this.buy = function() //扩展User方法 { alert(this.firstName + ': 购买一条老底,共' + this.money + '元。' ); }; this.say = function(str)//重载父类的say方法 { alert(this.firstName + ': 这老底太贵了。 哥穿不起!' + str); } }; User.prototype = new Person(); //原行继承方式Person对象做为User的原型。 var user = new User(); user.firstName = 'Lang'; user.buy(); user.say('不穿算了!');
那么在重载父类的方法时,如何实现像Java 跟AS3.0一样的super()方法呢?
var User = function(){ this.money = 100; //扩展User属性 this.buy = function() //扩展User方法 { alert(this.firstName + ': 购买一条老底,共' + this.money + '元。' ); }; this.super = this.say;//将父类的say()方法赋值给super属性; this.say = function(str)//重载父类的say方法 { this.super();//在这里调用上面刚刚赋值的super()方法,这里调用就像调用父类的say()方法一样。很过瘾哦! alert(this.firstName + ': 这老底太贵了。 哥穿不起!' + str); } }; User.prototype = new Person(); //原行继承方式Person对象做为User的原型。 var user = new User(); user.firstName = 'Lang'; user.buy(); user.say('不穿算了!');//这次,这里将会有两个输出
上一篇: java i++和++i