资讯专栏INFORMATION COLUMN

再记面向对象

mochixuan / 2314人阅读

摘要:实例对象与构造函数的原型联系是在创建实例时确定的,当创建后更改原型对象并不改变之前创建的实例所关联的原型对象,新创建的使用新的原型对象。

再记面向对象 函数和对象的联系

先理一下函数的功能:

创建:可以通过字面量创建

可以赋值给变量、数组作为成员和其他的对象作为属性

作为函数的参数

作为返回值

自身可以添加属性

在上面列出的函数功能对象皆具有

详细函数介绍 为什么介绍函数?

因为闭包、面向对象都需要与其有关,并且函数对于JavaScript的重要性则是无与伦比

函数创建的几种方法:

函数定义: 函数声明和函数表达式(回调函数与其关系)

箭头函数: es6增加(注意箭头函数的this)

函数构造函数:new function ("a","b","return a+b");

生成器函数:

函数声明和函数表达式

函数声明:

函数声明用function 开头,并且函数名为强制存在,参数名可选,函数体用大括号{}包起来。

function square(number) {
    return number * number;
    }

注意函数名必须存在,这样才可以被其他地方进行调用。函数可以在函数里声明 ,[闭包]()与此有关。

函数表达式:

函数表达式则是可以被用来作为参数、作为返回值。可以快速的被创建使用。

var fn = function() {
  console.log("hello world")
}

fn()

function outPut (callback) {
  callback()
}

outPut(fn)

函数名不是必须的

箭头函数

function getName (name) {
  return (function(j) {
   return j
  })(name)
}

var showName = getName("kangkang")

console.log(showName)

下面改写为箭头函数形式

function getName (name) {
  return (j=>j)(name)
}

var showName = getName("kangkang")

console.log(showName)

遵循 参数=>被返回的表达式的值(p,b)=>p+b相当于function(p,b){return p+b},也可以使用代码块进行必要的操作,此时需要显示表明return的值。

调用函数:

函数的调用,定义一个函数并不会执行它,需要调用。在调用时,你需要给定可选的参数,如果参数为空则无需给定。函数声明的提升可以让函数不在顶层被声明。

一个需要注意的地方 函数提升仅适用于函数声明,而不适用于函数表达式。

具体函数的调用在this上的改变令人捉摸不透,我也写了篇笔记 [this何时为何值?]()待添加

原型链:

每个对象(函数)具有一个原型属性,指向可以被实例共享的属性和方法。而原型链在寻找某个属性时体现的比较清楚:

function one () {
  this.value = 1
}
one.prototype.output = function() {
  console.log(this.value)
}

function two () {
  this.value = 2
}

function three () {
  this.value = 3
}

two.prototype = Object.create(one.prototype)
three.prototype = Object.create(two.prototype)

var one1 = new one()
var two1 = new two()
var three1 = new three()

three1.output()
// 对于three1来说并没有output这个方法,就是通过原型链这个链进行一层一层寻找的
重写对象原型引起的问题

在构造函数创建新的实例后依然可以添加新的原型属性和方法并且可以被访问到,但是如果重写整个原型对象的话,就需要注意了。实例对象与构造函数的原型联系是在创建实例时确定的,当创建后更改原型对象并不改变之前创建的实例所关联的原型对象,新创建的使用新的原型对象。

constructor属性指向创建实例的函数

个人学习备忘,如有谬误,欢迎指正。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94391.html

相关文章

  • 再记一次nginx的报错 : (

    2016/04/29 02:36:36 [error] 12717#0: *122075 FastCGI sent in stderr: Primary script unknown while reading response header from upstream, client: 127.0.0.1, server: xxxxxxxx, request: GET / HTTP/1.1, u...

    MarvinZhang 评论0 收藏0
  • 再记一次nginx的报错 : (

    2016/04/29 02:36:36 [error] 12717#0: *122075 FastCGI sent in stderr: Primary script unknown while reading response header from upstream, client: 127.0.0.1, server: xxxxxxxx, request: GET / HTTP/1.1, u...

    phodal 评论0 收藏0
  • 【PHP】PHPExcel类 excel常用操作小结

    摘要:使用好久了,好像今天才想起来要记一篇博客呢。之前一直用的框架,后来做接口的时候打算换成不料机缘巧合之下又结识了,于是乎决然的站到了的大营之下。今天小记一下这个类库的常用操作。首先贴上地址,直接去下载最新版好了。 PHP使用好久了,好像今天才想起来要记一篇博客呢。之前一直用的 ci 框架,后来做接口的时候打算换成 tp5, 不料机缘巧合之下又结识了 node,于是乎决然的站到了 js 的...

    suosuopuo 评论0 收藏0
  • 给准备着手写博客的小白的一些实用建议

    摘要:针对一些想写博客提升能力,但是很迷茫不知道怎么开始的同学,我会尽我所能给出一些建议。它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的或者文档。 目录 ...

    ad6623 评论0 收藏0
  • js谜之正则表达式

    摘要:用正则表达式语言创建的。匹配非数字的字符使用元字符元字符在正则表达式中有特殊含义的字符。正则表达式默认是区别大小写的。正则表达式的字符串表示。若是一个正则表达式,若有标志则替换所有匹配之处,若没有则只替换第一个匹配之处。 前言 好久之前就说要写一篇正则表达式的文章,正则表达式总是记了又忘,忘了再记,记了再忘,卒。言归正传,今天终于要研究一下这个谜一样的正则表达式了。其实正则表达式并不难...

    wendux 评论0 收藏0

发表评论

0条评论

mochixuan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<