javascript面向对象编程的基础

javascript面向对象编程的基础
对面向对象的再认识

为了说明Javascript是一种彻底的面向对象语言,有必要从面向对象的概念入手,从以下几个方面讨论几个概念:

一切都是客体
对象具有封装和继承特性。
对象和对象之间使用消息通信,每个都有信息隐藏。
基于这三点,C++是一种半面向对象的半面向过程的语言,因为他虽然实现了封装、继承和多态的类,有全局函数和变量,不是面向对象的。java和C #是完全面向对象的语言,其组织功能和变量在类的形式他们离不开的对象。但功能本身是一个过程,但它是连接到一个班。

然而,对象的对象只是一个概念或编程思想。它不应该依赖于一种语言的存在。例如,java语言采用面向对象的思想构建,实现机制,如类、继承、派生、多态、接口等等,但这些机制是实现面向对象编程,一个是不必要的。换句话说,语言选择正确的方式来实现基于自身特点的对象,因为大多数程序员首先学习或使用类似于java,C++等高级编译语言(虽然java是半编译半解释,但一般是编译的解释),并接受类先入为主的面向对象的实现,所以,当学习一种脚本语言在面向对象语言中,习惯性的概念决定了语言是否是面向对象的语言类,或者它们是否具有面向对象的特性,这是阻碍程序员深入学习和掌握Javascript的重要原因之一。

事实上,Javascript语言是通过面向对象的程序设计来实现的,称为原型,然后讨论了基于类(基于类)、面向对象和基于原型的两种构建目标世界的方法之间的差异。

基于对象和原型的基于类的面向对象比较

在基于类的面向对象的方法,一个对象(object)是由类产生的(类)。在一个基于原型的面向对象方法中,对象(客体)是通过使用构造函数构造(构造函数)使用原型(原型)。对客观世界的一个例子来说明在认知的两方法的差异。例如,一辆汽车是在一个工厂。另一方面,工人必须按图纸指定的汽车应。这里是语言类的工程图纸(类),而汽车是用类一致(类)制成的;另一方面,工人和机器(相当于构造函数)使用各种部件如发动机、轮胎、转向轮(性能相当于原型)将被构造出来的车。

事实上,在这两种方式中,谁更明确地表达了面向对象的思想,目前仍存在争论,但我认为原型对象导向是一种更为彻底的面向对象的方法,其原因如下:

首先,客观世界中物体的产生是其他物体的结果,抽象的图纸不能产生汽车。也就是说,类是抽象概念而不是实体,对象的生成是实体的生成。

其次,根据事物中最基本的面向对象原理的对象,类(类)本身不是一个对象,而是构造函数(构造函数)和(原型)中的原型,原型本身是由其他对象构造成对象类型的。

再次,在面向对象语言中的类,对象的状态(状态)的对象实例(实例)认为,行为对象的方法(方法)是由对象的类声明举行的结构,只有对象的方法可以继承;并在原型对象语言对象的行为和状态,属于对象本身,并可以继承在一起(参见参考资料),这是更接近客观实际。

最后,类如java的面向对象语言,为了弥补全局函数和变量在面向过程语言的使用不便,让静态的静态属性和静态方法是在类中声明的。事实上,在客观世界中没有所谓的静态的概念,因为一切都是对象的。原型的面向对象语言,没有全局对象、方法或属性,或静态的概念,只有建立在对象。所有的语言元素(原始)必须依赖于对象的存在。然而,由于函数式语言的特性,在运行时上下文的变化而变化,是依赖于语言元素对象(背景),这是体现在这个指针的变化中,这个特征更接近于所有事物,宇宙是所有事物的基本存在的自然观点。
面向对象的知识

虽然Javascript本身是一个非类的概念,但它仍然具有面向对象的特性,尽管它与通用面向对象语言不同。

创建对象的简单方法如下所示:
功能MyObject(){

};

一般来说,在Javascript中创建对象有两种方法:函数构造方法和字面方法,属于函数构造方法:

VaR MyObject = { {

};

如果只需要一个对象,不需要对象的其他实例,建议使用一种字面方法。如果需要多个对象实例,则建议使用函数构造方法。

定义属性和方法

功能构建方法:
功能MyObject(){
this.iam =一个对象;

this.whatami =函数(){
console.log(我+这个。我);
};
};

直译法:
VaR MyObject = { {
我:一个对象,

whatami:函数(){
console.log(我+这个。我);
}
};

通过这两种方法创建的对象中,有一个名为我,和一种whatami。属性是一个对象中的变量和方法是一个函数对象中。

如何获取属性和调用方法:
无功W = myobject.iam;

MyObject.whatAmI();

当方法被调用时,必须添加圆括号。如果没有添加圆括号,它只返回方法的引用。

两种创建对象方法的区别

在函数构造方法中定义属性和方法时,使用前缀,而不需要文字量方法。
当函数构造方法将值赋给属性且方法为=时,字面量方法使用:。
如果有多个属性或方法,则使用函数构造方法;分区被分割,文字方法被使用和分离。
对于文字方法创建的对象,可以通过对象的引用直接调用对象的属性或方法:
MyObject.whatAmI();

对于函数构造方法,您需要创建对象的实例来调用它的属性或方法:
无功mynewobject =新的MyObject();
MyNewObject.whatAmI();

使用构造函数

现在回到函数构造方法之前:
功能MyObject(){
this.iam =一个对象;
this.whatami =函数(){
console.log(我+这个。我);
};
};

事实上,它似乎是一个函数,因为它是一个函数,它能被传递给它吗第二次修改代码。
功能MyObject(什么){
this.iam =什么;
this.whatami =功能(语言){
console.log(我+ this.iam ++语言+语言);
};
};

然后实例化对象并传递给参数:
无功mynewobject =新的MyObject(一个物体);
MyNewObject.whatAmI('javascript);

程序最终输出我是Javascript语言的对象。

两种创建对象的方法,我应该使用哪种方式

对于文本方法,因为它不需要实例化,如果修改了对象的值,则该对象的值将永远被修改。任何其他地方都被重新审视。对于函数构造,在修改值时,它修改实例的值。它可以实例化n个对象,每个对象可以拥有不同的值,而且不会互相干扰。

首先看字面方法:
无功myobjectliteral = { {
MyProperty:这是一个财产
};

console.log(myobjectliteral。myproperty); / / log'this是财产

myobjectliteral.myproperty =这是一个新的属性;

console.log(myobjectliteral。myproperty); / / log'this是一个新的属性

即使创建一个新变量来指向对象,结果也是一样的。
无功myobjectliteral = { {
MyProperty:这是一个财产
};

console.log(myobjectliteral。myproperty); / / log'this是财产

同一myobjectliteral var =;

myobjectliteral.myproperty =这是一个新的属性;

console.log(相同。myproperty); / / log'this是一个新的属性

再看函数构造法:
使用功能构建方法
无功myobjectconstructor =函数(){()
this.myproperty =这是财产的
};

实例化一个对象
无功constructorone =新myobjectconstructor();

/第二个对象实例化
无功constructortwo =新myobjectconstructor();

输出
console.log(constructorone。myproperty); / / log'this是财产

输出
console.log(constructortwo。myproperty); / / log'this是财产

正如预期的那样,这两个对象的属性值是相同的。如果其中一个对象的值被修复了呢

使用功能构建方法
无功myobjectconstructor =函数(){()
this.myproperty =这是财产的;
};

实例化一个对象
无功constructorone =新myobjectconstructor();

修改对象的属性
constructorone.myproperty =这是一个新的属性;

/第二个对象实例化
无功constructortwo =新myobjectconstructor();

输出
警报(constructorone。myproperty); / / log'this是一个新的属性

输出
警报(constructortwo。myproperty); / / log'this是财产

正如您所看到的,函数构造方法实例化的不同对象是独立的,每个对象都可以有不同的值,因此,最终使用什么样的方法来创建对象取决于实际情况。

tag:面向对象编程基础电脑软件Javascript

相关内容