博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Function类型
阅读量:6989 次
发布时间:2019-06-27

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

一、定义函数的三种方式

  1. 函数声明方式 function a(){}
  2. 定义函数表达式方式 var a = function(){};
  3. 构造函数方式 var a = new Function(...arg,function){} 不推荐,但是指明了函数是对象,

二、函数是对象,那么函数名就是指针,跟包含对象指针的其他变量没有什么不同。

三、函数声明跟定义函数表达式区别

  1. 函数声明在解析过程中会被函数声明提前,无论何时调用都可以
  2. 定义函数表达式,则必须是执行到当前语句时,才会被执行。此时才可以被调用

四、arguments.callee

  1. callee属性是一个指针,指向拥有这个arguments对象的函数。

五、函数的属性跟方法

  1. 每个函数都包含的两个属性:prototype和length
  2. length:指的是参数个数
  3. prototype:保存函数所有的实例方法,例如toString()和valueOf()等方法实际上都保存在prototype名下,只不过通过各自对象实例调用而已。 是不可枚举的,所以不能被for in发现
  4. call和apply方法:每个函数都包含这两个非继承而来的方法。 他们都是在指定作用域中调用函数
  5. toLocalString()和toString()方法和valueOf()都是函数继承来的。 六、基本包装类型
  6. 基本包装类型的存在期只在执行的这一行,这行过去后,就会立马被销毁。因此基本包装类型没有属性跟方法
  7. var s = new String("nihao"); typeof(s); //"object" 对 基本 包装 类型 的 实例 调用 typeof 会 返回" object",

创建对象

一、工厂模式:用函数来封装以特定接口创建对象的细节

function createPerson( name, age, job){         var o = new Object();         o. name = name;         o. age = age;         o. job = job;         o. sayName = function(){             alert( this. name);         };         return o;    }     var person1 = createPerson(" Nicholas", 29, "Software Engineer");       var person2 = createPerson(" Greg", 27, "Doctor");      console.log(person3.sayName == person4.sayName);  // false    console.log(person3.constructor == Object); // true    console.log(person3.constructor == createPerson); // false复制代码

二、构造函数模式

三、原型模式:的 每个 函数 都有 一个 prototype( 原型) 属性, 这个 属性 是一 个 指针, 指向 一个 对象, 而这 个 对象 的 用途 是 包含 可以 由 特定 类型 的 所有 实例 共享 的 属性 和 方法。 如果 按照 字面 意思 来 理解, 那么 prototype 就是 通过 调用 构造 函数 而 创建 的 那个 对象 实例 的 原型 对象。 换句话说, 不必 在 构造 函数 中 定义 对象 实例 的 信息, 而是 可以 将 这些 信息 直接 添加 到 原型 对象 中

function Person(){ }     Person. prototype. name = "Nicholas";     Person. prototype. age = 29;     Person. prototype. job = "Software Engineer";     Person. prototype. sayName = function(){         alert( this. name);     };     var person1 = new Person();     person1. sayName(); //"Nicholas"     var person2 = new Person();     person2. sayName(); //"Nicholas"复制代码

四、prototype 跟原型对象之间的关系

五、原型模式

  1. 对象实例可以访问保存在原型中的值,但是实例对象不能更改原型对象上的值。
  2. 原型 最初 只 包含 constructor 属性, 而 该 属性 也是 共享 的, 因此 可以 通过 对象 实例 访问。
  3. 当 为 对象 实例 添加 一个 属性 时, 这个 属性 就会 屏蔽 原型 对象 中 保存 的 同名 属性;

转载于:https://juejin.im/post/5bcfda9e518825779b471f75

你可能感兴趣的文章
k8s(四)、微服务框架istio安装测试
查看>>
使用Service Mesh整合您的微服务架构
查看>>
阿里开源的 java 诊断工具—— Arthas
查看>>
linux内容批量替换的命令
查看>>
dedecms广告功能分析
查看>>
Confluence 6 升级自定义的站点和空间获得你的自定义布局
查看>>
Angular CLI 创建你的第一个 Angular 示例程序
查看>>
深入理解javascript原型和闭包(16)——完结
查看>>
近日记事2-PG库挂掉了,还是恢复吧~
查看>>
数据源ObjectDataSource的数据访问类的编写
查看>>
如何点击每一列的时候alert其index
查看>>
【原创翻译】类型
查看>>
深入解读Windows Azure VM 实例级 IP
查看>>
python常用函数
查看>>
Eclipse记录
查看>>
C++ 一个自己实现的字符串类
查看>>
KVM
查看>>
Go语言知识积累:windows开发环境搭建
查看>>
我的友情链接
查看>>
字节流
查看>>