美文网首页
JavaScript Object​.prototype属性

JavaScript Object​.prototype属性

作者: Kevin丶CK | 来源:发表于2019-04-30 15:21 被阅读0次

**Object.prototype** 属性表示 Object的原型对象。

1、属性特性

Object.prototype 属性的属性特性: 类型
writable boolean true
enumerable boolean false
configurable boolean true

2、描述

几乎所有的 JavaScript 对象都是 Object的实例;一个典型的对象继承了Object.prototype的属性(包括方法),尽管这些属性可能被遮蔽(亦称为覆盖)。但是有时候可能故意创建不具有典型原型链继承的对象,比如通过Object.create(null)方法创建的对象,或者通过Object.setPrototypeOf方法改变原型链。
改变Object原型,会通过原型链改变所有对象;除非在原型链中进一步覆盖受这些变化影响的属性和方法。这提供了一个非常强大的、但有潜在危险的机制来覆盖或扩展对象行为。

3、属性

3.1 Object​.prototype​.constructor

返回创建实例对象的 Object 构造函数的引用。注意,此属性的值是对函数本身的引用,而不是一个包含函数名称的字符串。对原始类型来说,如1true"test",该值只可读。

      var o = {};
      console.log(o.constructor === Object); // true
      var o = new Object();
      console.log(o.constructor === Object); // true
      var a = [];
      console.log(a.constructor === Array); // true
      var a = new Array();
      console.log(a.constructor === Array); // true
      var n = new Number(3);
      console.log(n.constructor === Number); // true

上面实例中,所有对象都会从它的原型上继承一个 constructor 属性。
我们也可以改变对象的constructor属性,但是并不安全。
比如我们给子类添加链式调用的功能,constructor属性指向不对,将报错。
举个🌰~~

      function Parent() {}
      function CreatedConstructor() {}
      CreatedConstructor.prototype = Object.create(Parent.prototype);
      //  CreatedConstructor.prototype.constructor = CreatedConstructor; // (第四行)set right constructor for further using
      CreatedConstructor.prototype.create = function() {
        return new this.constructor();
      };
      console.log(CreatedConstructor.prototype.constructor); //ƒ Parent() {}
      new CreatedConstructor().create().create();

上述例子,我们修改了CreatedConstructor的prototype指向,在CreatedConstructor的prototype上创建create方法 。create方法返回当前实例的构造函数,实现链式调用。注释掉第四行,发现报错,只能调用一次create方法。

constructor指向Parent
放开第四行,设置正确的constructor指向,就可以实现了。
constructor指向CreatedConstructor
总结
手动设置或更新构造函数可能会导致不同且有时令人困惑的后果。为了防止它,只需在每个特定情况下定义构造函数的角色。在大多数情况下,不使用构造函数,并且不需要重新分配构造函数。

相关文章

  • JavaScript Object​.prototype属性

    **Object.prototype** 属性表示 Object的原型对象。 1、属性特性 2、描述 几乎所有的 ...

  • Object一些属性和方法

    Object.prototype 属性表示Object的原型对象。JavaScript中几乎所有的对象都是 Obj...

  • Object.prototype

    Object.prototype属性表示Object的原型对象 Object.prototype 属性的属性特征:...

  • js的prototype

    javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解...

  • JavaScript - prototype理解

    Javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解...

  • JavaScript prototype 总结

    JavaScript prototype summary javaScript的prototype属性是一个对象,...

  • js对象类继承的方法

    javascript实现继承的核心是原型链,查找属性的时候会从prototype去查询,直到Object.prot...

  • 复习:Object

    MDN 上所有 Object 方法 属性 Object.prototype.constructor Object....

  • JavaScript Object

    Object 属性 prototype 实例属性 constructor 实例方法 hasOwnProperty ...

  • Object.prototype

    所有的对象都继承了Object.prototype的属性和方法 Object.prototype.construc...

网友评论

      本文标题:JavaScript Object​.prototype属性

      本文链接:https://www.haomeiwen.com/subject/zmcvnqtx.html