博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript 构造函数和方法
阅读量:6268 次
发布时间:2019-06-22

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

在之前这篇日志里面有提到构造函数,现在,来具体的介绍以下javascript的构造函数及方法的概念。

这是两个及其有用的概念,对后面介绍javascript的面向对象机制,及其类方法,继承的顿悟有着说不清,道不明的好处,

仔细理解一下吧

构造函数:

在javascript中,使用new运算符或者预定义的构造函数(如Object(),Date(),Function()等)都可以创建并初始化一个新的js对象。

构造函数具有如下两个特性,其本质仍然是javascript函数:

它由new运算符调用

传递给它的是一个对新创建的空对象的引用,将该引用作为关键字this的值,而且它还要对新创建的对象进行适当的初始化

  
//定义构造函数,
  
function User
(
name
,age
)
  
{
     
this.
name 
= 
name
;
     
this.
age    
= age
;
 
}
 
//实例化两个对象
 
var simaopig 
= 
new User
(
'simaopig'
,
'25'
)
;
 
var xiaoxiaozi 
= 
new User
(
'xiaoxiaozi'
,
'25'
)
;

这里需要明白并且强迫自己接受如下观点:构造函数知识初始化了特定的对象,但是其并不返回这个对象

在上例中,我们可以看到构造函数对this的引用,其只是初始化由this传递进来的对象,并且啥也不返回。

方法:

所谓方法(method),其实就是通过对象调用的javascript函数

其实函数又是什么?函数与方法又有啥不同?这似乎是一个哲学概念?鸡是什么?那就是蛋啊。。

函数其实就是数值,其和方法没有任何本质区别,之所以要交两个名字,无非是要强调对象的作用罢了。

因为你完全可以把函数赋值给任何变量,当然也就包括了对象的属性。

//实例化对象o
var o 
= 
new Object
(
)
;
//把函数fun赋值给o的属性method
o.
method 
= fun
;
//声明函数fun
function fun
(
)
{
return 
'250'
;
}
//调用o的属性,效果同学们自己去查看,又是弹窗,值为250
alert
(o.
method
(
)
)
;

方法有个非常重要的属性,即在方法主体内部,关键字this的值为调用该方法的对象。

任何被用作方法的函数都会得到一个额外的实际参数,就是调用该函数方法的对象,也就是刚才我告诉你的this。

我为啥说函数其实就是方法,方法也就是函数呢?

函数是储存在变量中的值,而那个变量也不过是全局对象的一个属性,因此,当你调用一个函数是,其实就是在调用全局对象的一个方法。

但是,函数和方法真正的不同点就在于设计和目的上,方法是用来对this对象进行操作的,而函数通常是独立的并不需要this对象。

本来写到这里就不想再说啥了,不过,如果不把这个例子抄下来,难免真正需要的人就有些发晕,尤其当看我下一篇日志的时候。。

所以,抄。

//定义构造函数 矩形,有俩属性,宽和高
function Rectangle
(w
, h
)
{
this.
width 
= w
;
this.
height 
= h
;
}
//定义一个方法,计算面积,这里用了this哦
function compute_area
(
)
{
return 
this.
width 
* 
this.
height
;
}
//实力化对象rect
var rect 
= 
new Rectangle
(
3
,
4
)
;
//通过给属性赋值把函数 compute_area作为rect对象的一个属性
rect.
area 
= compute_area
;
//如下内容调用新的方法获得面积 结果为3 * 4
var are 
= rect.
area
(
)
;

上述代码有个问题,就是我每次调用rect对象的方法前,总得将方法赋值给其的一个属性。

那我新实例化的对象,比如rect2要想求得面积,还得这样来上一遍。麻烦啊。

那如果我直接在构造函数里面声明呢?为所用实例化的对象都声明一个方法,是不是可以解决问题?

NO,虽然你很聪明,因为

转载地址:http://ktppa.baihongyu.com/

你可能感兴趣的文章
Ubuntu C/C++开发环境的安装和配置
查看>>
百世汇通快递地区选择插件,单独剥离
查看>>
Linux系统调用---同步IO: sync、fsync与fdatasync【转】
查看>>
【MyBatis学习06】输入映射和输出映射
查看>>
[LeetCode] Decode String 解码字符串
查看>>
数字逻辑的一些基本运算和概念
查看>>
ant重新编译打包hadoop-core-1.2.1.jar时遇到的错
查看>>
【★★★★★】提高PHP代码质量的36个技巧
查看>>
3 weekend110的配置hadoop(格式化) + 一些问题解决 + 未免密码配置
查看>>
JavaScript Creating 对象
查看>>
Java compiler level does not match the version of the installed Java project facet.(转)
查看>>
WPF MediaElement.Position属性
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
spring mysql多数据源配置
查看>>
[React] Override webpack config for create-react-app without ejection
查看>>
检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。...
查看>>
测试java的父子类化
查看>>
HDOJ 1008
查看>>
安装thrift出现的一些问题
查看>>
makefile编写---单个子目录编译模板
查看>>