object constructor

本文深入浅出地介绍了面向对象编程的基本概念,包括对象的属性、方法和事件,以及如何使用JavaScript通过构造函数和原型链创建对象实例。通过具体示例,讲解了对象创建的不同方式及其在实际编程中的应用。

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

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

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

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

人:

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

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

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

复制代码
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;

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

JavaScript中的每个函数都有一个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。这就是原型的一种应用。

 from:前端攻城狮小屋

转载于:https://www.cnblogs.com/tigerqaq/p/9943036.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值