博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js方法和原型继承(一)
阅读量:4557 次
发布时间:2019-06-08

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

在js语言规范中并不存在方法这一概念,方便起见,将作为对象属性的函数成为方法

this引用的规则
a.在最外层代码中,this引用的是全局对象
b.在函数内,this引用根据函数调用方式不同而不同
函数内部的this引用 见下表

函数的调用方式

this引用的引用对象

构造函数调用

所生成的对象

方法调用

接收方对象

apply或call调用

由apply或call的参数指定的对象

其它方式调用

全局对象

接收方对象是这样一种对象

通过点运算符或者中括号运算符调用对象方法时,在运算符左侧所指定的对象
下面是一个关于方法和接收方对象的具体实例

this引用应注意的点

this的引用的引用对象会随着方法的调用方式不同而不同

apply与call

在Function对象中包含apply和call这两种方法,通过他们调用的函数的this引用可以指向任意的特定对象,也就是他们可以
显式指定接收方对象

原型继承

形式上的理解
类名.prototype.方法名=function(参数){方法体}

原型链

原型继承支持一种称为原型链的功能,使用原型链有2个前提
a.所有的函数(对象)都具有名为prototype的属性(prototype属性所引用的对象则称为prototype对象)
【对象实例 如上代码中的obj1没有prototype属性】

b.所有的对象都含有一个(隐藏的)链接,用以指向在对象生成过程中所使用的构造函数(Function对象)的prototype对象b.所有的对象都含有一个(隐藏的)链接,用以指向在对象生成过程中所使用的构造函数(Function对象)的prototype对象

对象(类的实例)对属性的读取 查找顺序

1.对象自身的属性(通过实例化类获取的属性)
2.隐式链接所引用的对象(即构造函数的prototype对象)的属性 (obj1.__proto__=Myclass.prototype)
3.第二项中的对象的隐式链接所引用的对象的属性
4.反复按照第三步的规则查找直至全部查找完毕(查找的终点是Object.prototype对象)

当一个函数对象被创建时,Function构造器产生的函数对象会运行类似这样的一些代码

this.prototype={constructor:this}
新函数的对象被赋予一个prototype属性,他的值是包含constructor属性且属性值为该新函数的对象,这个prototype对象是存放继承特征的地方,
因为javascript语言没有提供一种方法去确定哪个函数是打算用来做构造器的,所以每个函数都会得到一个prototype对象
constructor没什么用
当采用构造器调用模式,即用new去调用一个函数,函数执行方式将发生改变
如果new 运算符是一个方法而不是一个运算符,它可能会这样执行

 

转载于:https://www.cnblogs.com/HKUI/p/4122008.html

你可能感兴趣的文章
九大排序算法再总结
查看>>
Uva10290 - {Sum+=i++} to Reach N
查看>>
每日一小练——数值自乘递归解
查看>>
二叉搜索树 (BST) 的创建以及遍历
查看>>
MyBatis/Ibatis中#和$的区别
查看>>
【JAVASCRIPT】React学习-组件生命周期
查看>>
win 64 文件操作
查看>>
LeetCode : First Bad Version
查看>>
pythone函数基础(14)发送邮件
查看>>
Java的一些好看的
查看>>
Linux 修改文件夹和其中所有文件的权限
查看>>
详解volatile 关键字与内存可见性
查看>>
go 聊天室简单版总结
查看>>
HDU 4258 斜率优化dp
查看>>
Literature review
查看>>
Java 中可变参数
查看>>
PyTorch在64位Windows下的Conda包(转载)
查看>>
php的单元测试,PHPUnit安装
查看>>
CentOS7 设置软件镜像源
查看>>
Java并发编程:并发容器之ConcurrentHashMap
查看>>