JavaScript基础 面向对象-阿里云开发者社区

开发者社区> 开发与运维> 正文

JavaScript基础 面向对象

简介: 参考:http://bbs.51js.com/thread-74195-1-1.html 构造器 构造器代码必须放在整个类定义的最后,这样做是为了保证在它当中被调用的方法都已经被定义了。   私有实例成员[变量和方法] 私有实例成员在 JavaScript 中实际上可以用函数内的局部变量来实现,它相当于类的私有实例成员 他们只能在该类的对象内部被使用,在对象外无法使用。

参考:http://bbs.51js.com/thread-74195-1-1.html

构造器

构造器代码必须放在整个类定义的最后,这样做是为了保证在它当中被调用的方法都已经被定义了。

 

私有实例成员[变量和方法]

私有实例成员在 JavaScript 中实际上可以用函数内的局部变量来实现,它相当于类的私有实例成员

他们只能在该类的对象内部被使用,在对象外无法使用。

创建私有方法有两种方式,一种是直接在类中定义方法,另一种是先定义一个局部变量(私有实例字段),然后定义一个匿名方法赋值给它。

 

公有实例成员:两种方法,prototype 和this定义

1、prototype 方式只应该在类外定义。this 方式只能在类中定义。

2、prototype 方式如果在类中定义时,则存取私有实例成员时,总是存取最后一个对象实例中的私有实例成员。

3、prototype 方式定义的公有实例成员是创建在类的原型之上的成员。this 方式定义的公有实例成员,是直接创建在类的实例对象上的成员。

基于前两点区别,我们可以得到这样的结论:如果要在公有实例方法中存取私有实例成员,那么必须用 this 方式定义。

关于第三点区别,我们后面在讨论继承时再对它进行更深入的剖析。这里只要知道有这个区别就可以了。

不要把通过 prototype 方式创建的公有实例方法定义在类的内部!

 

公有静态成员

定义的方式就是给 className.memberName 直接赋值。

一定不要将公有静态成员定义在它所在的类的内部

 

静态类

myClass = new function() {...}

 

继承:一种是原型继承法,一种是调用继承法

[原型继承法]

子类继承来的公有实例方法中,如果调用了私有实例字段或者私有实例方法,则所调用的这些私有实例成员是属于父类的。

子类中定义的实例方法,如果调用了私有实例字段或者私有实例方法,则所调用的这些私有实例成员是属于子类的。

定义在父类原型上的方法,会被子类继承。

子类中定义的实例方法是不能访问父类中定义的私有实例成员的。

静态成员是不会被继承的。

 

[调用继承法]

定义在父类原型上的方法,不会被子类继承。

子类中定义的实例方法同样不能访问父类中定义的私有实例成员的。

静态成员同样不会被继承的。

是通过调用继承法,可以实现多继承。也就是说,一个子类可以从多个父类中继承通过 this 方式定义在父类内部的所有公有实例成员。

function subClass() {

// inherit

parentClass.call(this);

 

方法重载示例

function parentClass() {

this.method = function() {

alert("parentClass method");

}

}

function subClass() {

var method = this.method;

this.method = function() {

method.call(this);

alert("subClass method");

}

}

subClass.prototype = new parentClass();

subClass.prototype.constructor = subClass;

 

var o = new subClass();

o.method();

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章