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();

 

相关文章
|
1月前
|
JavaScript 前端开发 Java
深入JS面向对象(原型-继承)(三)
深入JS面向对象(原型-继承)
37 0
|
1月前
|
JavaScript 前端开发 Java
深入JS面向对象(原型-继承)(一)
深入JS面向对象(原型-继承)
38 0
|
9月前
js- 面向对象进阶
Object.defineProperty等面向对象的信息
|
9月前
|
存储 JavaScript 前端开发
|
6天前
|
设计模式 JavaScript 前端开发
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
JavaScript的继承机制基于原型链,它定义了对象属性和方法的查找规则。每个对象都有一个原型,通过原型链,对象能访问到构造函数原型上的方法。例如`Animal.prototype`上的`speak`方法可被`Animal`实例访问。原型链的尽头是`Object.prototype`,其`[[Prototype]]`为`null`。继承方式包括原型链继承(通过`Object.create`)、构造函数继承(使用`call`或`apply`)和组合继承(结合两者)。ES6的`class`语法是语法糖,但底层仍基于原型。继承选择应根据需求,理解原型链原理对JavaScript面向对象编程至关重要
23 7
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
|
1月前
|
前端开发 JavaScript
前端 JS 经典:Class 面向对象
前端 JS 经典:Class 面向对象
15 1
|
1月前
|
JavaScript 前端开发
JavaScript 原型链继承:掌握面向对象的基础
JavaScript 原型链继承:掌握面向对象的基础
|
1月前
|
JavaScript 前端开发 API
在Node.js上使用dojo库进行面向对象web应用开发
请注意,虽然这个例子在Node.js环境中使用了Dojo,但Dojo的许多功能(例如DOM操作和AJAX请求)在Node.js环境中可能无法正常工作。因此,如果你打算在Node.js环境中使用Dojo,你可能需要查找一些适用于服务器端JavaScript的替代方案。
29 0
|
1月前
|
JSON JavaScript 前端开发
深入JS面向对象(原型-继承)(四)
深入JS面向对象(原型-继承)
32 0
|
1月前
|
设计模式 JavaScript 前端开发
深入JS面向对象(原型-继承)(二)
深入JS面向对象(原型-继承)
50 0