最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • (JS)实例对象与new命令

    正文概述 掘金(前端五月天)   2020-11-27   332

    实例对象与new命令

    1.对象是什么?

    对象是对现实世界复杂关系的抽象表现,对象之间的分工合作,能够完成对真实世界的模拟。

    (1)对象是单个实物的模拟

    一把椅子,一本书,一个人都可以是对象,,当某个实物变成对象后,人和书、人和椅子的关系就能够抽象为两个对象之间的关系,从而实现对真实世界的模拟。

    (2)对象是一个容器

    对象是一个容器,里面能够存放许多特征,例如属性(property)是对象的状态,方法method是对象的行为。例如把交通工具抽象为一个对象,那么属性就是记录具体是哪一种交通工具,方法则记录该交通工具的驾驶方式。

    2.构造函数

    构造函数本质是一个普通的函数,但具备一些特征和用法。

    var Animal=function(name){
        this.name=name;
    };
    

    特点

  • 构造函数名字的第一个字母一般要大写
  • 函数体内部使用了`this`关键字,代表了所要生成的对象实例。
  • 生成对象的时候,必须使用`new`命令。

    3.new命令

    3.1 基本用法

    new命令的作用,就是执行构造函数,返回一个实例对象。

    var Animal=function(name){
        this.name=name;
    };
    
    var p = new Animal("pig");
    p.name; //pig
    

    new命令执行时,构造函数内部的this,会代表新生成的实例对象,this.name表示,实例对象会有一个name属性,值为pig

    特别注意

    构造函数一定要搭配new来使用,否则将得不到想要的结果。

    let a=Animal("pig");
    a; //undefined
    name; //pig
    

    因为没有搭配new,构造函数中的this指向window,导致生成一个名为name的全局变量.

    当使用严格模式时,未按标准使用构造函数,将会抛出一个错误。

    "uses strict";
    let a=Animal("pig");
    //TypeError: Cannot set property 'name' of undefined
    
    

    由于严格模式中,函数内部的this不能指向全局对象,默认等于undefined,导致不加new调用会报错

    3.2 new命令的原理

    使用new命令时,它后面的函数依次执行下面的步骤。

    1.创建一个空对象,作为将要返回的对象实例。 2.将这个空对象的原型,指向构造函数的prototype属性。 3.将这个空对象赋值给函数内部的this关键字。 4.开始执行构造函数内部的代码。

    构造函数之所以称之为构造函数,是因为在其内部this会指向一个new方法新生成的空对象,所有针对this的操作都会作用于这个空对象,以实现"构造"的效果。

    构造函数默认返回this对象,若构造函数内有return语句,且后面跟着一个对象,则会返回return语句指定的对象

    3.3 简化实现

    new命令简化的内部流程,可以用下面的代码表示。

    function _new(/* 构造函数 */ constructor, /* 构造函数参数 */ params) {
      // 将 arguments 对象转为数组
      var args = [].slice.call(arguments);
      // 取出构造函数
      var constructor = args.shift();
      // 创建一个空对象,继承构造函数的 prototype 属性
      var context = Object.create(constructor.prototype);
      // 执行构造函数
      var result = constructor.apply(context, args);
      // 如果返回结果是对象,就直接返回,否则返回 context 对象
      return (typeof result === 'object' && result != null) ? result : context;
    }
    
    // 实例
    var actor = _new(Person, '张三', 28);
    

    4.Object.create() 创建实例对象

    如果希望以现有对象作为模版,构造一个新的对象,这时就可以使用Object.create()方法。

    var person1 = {
      name: '张三',
      age: 38,
      greeting: function() {
        console.log('Hi! I\'m ' + this.name + '.');
      }
    };
    
    var person2 = Object.create(person1);
    
    person2.name // 张三
    person2.greeting() // Hi! I'm 张三.
    

    上面代码中,对象person1是person2的模板,后者继承了前者的属性和方法。


    最后,感谢阮一峰老师的倾囊相助

  • 起源地下载网 » (JS)实例对象与new命令

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元