博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Js OOP编程 创建对象的一些理解。
阅读量:6037 次
发布时间:2019-06-20

本文共 2159 字,大约阅读时间需要 7 分钟。

面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

对象的含义

          对象可以是汽车,人,动物,文字,表单或者任何存在的事物等等。

对象有:

  属性-------对象的某些特定的性质。
  方法-------对象能做的事情。
  事件-------能响应发生在对象上的事情。

我们可以通过创建一个人的对象来理解面向对象

人:

  两只手,两只脚,一个头,还可以跑动。

  手,脚,头,是人的属性,跑动是人的方法。

首先,我们来用最简单的方法创建一个对象

1 var person = {2             head: "one",3             hand: "two",4             foot: "two",5             run : function(){6                 console.log("running");7             }8         }

这个方法一点都不实用,因为它是创建一个单独的对象,,而这个对象和任何常见的数据结构没有任何联系。

然后,我们用构造函数的方式创建一个对象

1 var Person = function(){
//注意,首字母大写 2 this.head = "one", 3 this.hand = "two", 4 this.foot = "two", 5 this.run = function(){ 6 alert("running"); 7 } 8 } 9 var Joan = new Person();10 document.write(Joan.run())// "running"

这是用构造函数创建的对象,然后我们再加上一行代码看看

1 var Niki = new Person();2         alert(Joan==Niki) //false;

是的,现在创建了是两个不同的对象实例。

在Script中的每个函数都有一个prototype的属性.如果某个函数被用作构造函数,则这个属性会被自动通过new调用创建对象的原型

console.log(Joan)
可以看到有一个__proto__:Person,其中__proto__是Joan的原型链.它是指向Person的原型. JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__的内置属性,用于指向创建它的函数对象的原型对象prototype。 关于原型链的一些理解,在JavaScript高级程序设计 一书中写的非常详细。有兴趣的可以去看看,网上也有pdf的文档可以找到。不过建议还是买本书,支持原版嘛。 然后对prototype这个原型属性的任何更改能够应用于用new Person()构造的每一个实例对象,不管它是在更改之前还是更改后创建.为Person.prototype 添加新函数.具体如下:
1 var Person = function(){
//注意,首字母大写 2 this.head = "one", 3 this.hand = "two", 4 this.foot = "two" 5 } 6 Person.prototype.run = function(){ 7 alert("running"); 8 } 9 var Joan = new Person();10 Joan.run()// "running"11 alert(Joan.__proto__===Person.prototype)//'true'
 

可以看到,在原型中创建方法是可以调用的,同时Joan的原型链是指向Person的原型的。

再看:

1 var Niki = new Person();//"runing"2         Person.prototype.run = function(){3             alert("running running")4         }5         Joan.run()//"running running"6         Niki.run()//"running running"

看,修改Person的原型方法,所有被new Person()创建的对象实例中的方法都被修改了,因为所有实例中共用的是同一个原型方法run。这就是原型的一种应用。

 

 

这就是关于创建对象的一些理解。

写了好久。也不知道有没有错误。 如果有错误,欢迎各位大大指点。 

下次再写面向对象继承方面的东西。

转载于:https://www.cnblogs.com/lkhome/p/5705755.html

你可能感兴趣的文章
素数筛选(模板)
查看>>
【转】安卓下微信内置浏览器视频出现解析错误
查看>>
[转载]---HiveQL详解
查看>>
剖析IE浏览器子系统的性能权重,互联网营销
查看>>
MPAA组织遭遇尴尬 网页存在XSS攻击漏洞
查看>>
MySQL表数据迁移自动化
查看>>
腰间盘突出方(刘力红)
查看>>
C#加密解密方法(转)
查看>>
code only 和 code first的关系 !! code only 就是 code first !!
查看>>
WCF入门(九)——未处理异常
查看>>
集合划分问题
查看>>
程序执行vhdl中延时器的编写
查看>>
导致flash屏幕重绘的几种方式及避免重绘的方法
查看>>
解读思维导图(一)误区
查看>>
[2014AMC]Navier-Stokes equations with regularity in two entries of the velocity gradient tensor
查看>>
java多线程:ReentrantReadWriteLock读写锁使用
查看>>
salesforce 零基础开发入门学习(三)sObject简单介绍以及简单DML操作(SOQL)
查看>>
OGG常见问题处理
查看>>
Mysql 自增列 主键
查看>>
Android Studio中提示:Project SDK is not defined
查看>>