首页 技术 正文
技术 2022年11月21日
0 收藏 0 点赞 165 浏览 1697 个字

类和对象

其他面向对象的语言类的语法是内置的,自然而然的事。javascript中有对象,但没有类的语法,类的实现需要模拟出来。只需要把对象想成一个容器,里面存放一些属性或方法,把类想象成一个对象的模板,便可以很简单的实现对象和类了。其他语言内置的类可能会有其他特性,但是js这种可以作为最简单的类来看待。 

js中内置有对象的概念。下面是对象创建的一些方式。

 对象的创建,下面是直接new Object()创建一个js对象,然后再设置属性和方法。

 var obj = new Object();
obj.a = 1;
obj.func1 = function(){};

js对象的属性不需要定义对象的时候写好,而是可以在任意时候设置,这是它的特点。这种方式管理不方便,并且不可重用。

另外有两种创建对象的方式

 var obj = {};
function ClassA() {
}

第一种是js的字典,字典本身也是一个js对象。因为动态语言的特性它可以存放各种类型的数据,包括函数指针

 var obj = {
"attr1": 1,
"attr2": [],
"fun1": function(a, b) {
return a + b;
}
};

 js字典取值的语法可以obj[‘attr1’]或者obj.attr1设值 obj[“attr1”] = 1; obj.attr1 = 2;所以使用的时候便可以

 var a = obj.attr1;
var b = obj.fun1(1, 6);
obj.attr1 = 9;
var c = obj.attr1;

这样字典对象本身的使用语法跟其他语言类也是相似的。它可以看作一个简单的对象使用。它与第一种方式差不多,是第一种的替代方案。

function的作用

如果要实现复杂类和对象的特性,需要用到function首先函数本身也是个对象,它有js对象的特性,所以可以给函数设置属性等。并且它可以看成是一个对象的构造函数,并且通过js的特性函数可以模拟成一个类来使用。(它是对象,也是函数,也是对象的构造函数,也可以模拟成类) 它本身就是个普通的函数,跟其它语言函数一样 

function func1(a, b) {
return a + b;
}
func1(1, 2);

它自己也是个对象,可以设置属性等

function A() {
}
A.a = ;
alert(A.a);

它可以做对象的构造器, 使用new关键字

function A() {
}
var obj = new A();
obj.attr = ;

它可是被看成是对象的构造函数

function A(a, b) {
this.a = a;
this.b = b;
}
var obj = new A();
obj.a;

this指向的是当前对象的引用,这个和其他语言类似。上例代码相当于

function A() {
}
var obj = new A();
obj.a = a;
obj.b = b;

(注:这个简单的转换对后续的内容的理解有所帮助)

 正是因为它有构造对象的能力,并且可以看出是对象的构造函数,所以说它有作为对象模板的功能。一个能定义对象的模板就可以被看成是类了。下面的一个function可以看成一个类

 function ClassA() {
this.a = 1;
this.b = [];
this.func1 = function() {
return this.a + 100;
};
}

使用的时候使用new关键字,new出一个对象来

 var objA = new ClassA();
var a = objA.a;
var b = objA.func1();
objA.a = 200;

上面定义类的方式可以看成如下

 function ClassA() {
} //js是动态语言,js对象的属性不需要定义对象的时候写好,而是可以在任意时候设置,这是动态语言的特点。
var objA = new ClassA();
objA.a = 1;
objA.b = [];
objA.func1 = function(){return this.a + 100};

字典方式也叫对象字面量,它只能直接创建一个对象出来,没有类的功能。直接需要一个对象的时候可以用这个办法创建。用function方式能模拟类的功能,并且将属性方法等设置定义在类定义的区域中,一是代码方便管理,二阅读起来也更方便,并且跟其他面向对象语言定义类的写法更相似。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,996
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,510
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,353
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,137
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848