Function类型

一、定义函数的三种方式

  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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值