JS里Object constructor和Prototype,麻烦解释下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS里Object constructor和Prototype,麻烦解释下相关的知识,希望对你有一定的参考价值。

constructor:对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数
Prototype:对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。

能否形象点解释下,复制粘贴的别来了,最好能给个实例谢谢

参考技术A 这要从对象,实例和原型三者关系说起,
如果你学过面向对象的语言或者你知道面向对象,那么一个对象可以创建一个实例,这应该没有问题,这是前提,现在开始说重点。
首先js中对象(函数(function)也是对象),可以访问到原型(prototype),
然后你通过对象得到的原型(prototype)中也会有一个给对象的指针(即constructor)
例如 :
function Person();
var pro = Person.prototype;//得到对象的原型
var obj = pro.constructor ; // 这样可以得到Person对象。

对象创建对象的实例就不多说了
var p = new Person(); // 创建一个对象实例 。

对象实例中也会隐含的包含一个指向prototype的指针(在safrai ,firefox,chrome,opera等浏览器中可以使用 '__proto__'来访问)
例如:
var p2 = new Person();
var proro = p2.__proto__ ;// 可以得到对象原型(prototype)的引用 ,
var bool = p2.__proto__ == Person.prototype;
alert(bool); // true 对象的原型和实例获取的原型是同一个对象,

总结:
对象和实例都可以访问到原型
对象:Person.prototype;
实例:p.__proto__ ;

原型可以访问到对象
Person.prototype.constructor;
则实例也可以访问到对象
p.__proto__.constructor ;本回答被提问者采纳

js类的constructor中不支持异步函数吗?

解决方案:

1.如果是普通函数,可以用async 和await来解决你的问题
但你这个是在constructor里,constructor 的作用是返回一个对像实例,如果加了async就变成返回一个promise了,所以这个方法行不通,因为做不到既返回一个promise又返回一个object 实例

eg:

class ShopCarTool{
      constructor(store,from_async){
       // var shopCar = DB.getItem(‘shop-car‘).toJson()// 从localStorage获取
        /* 从服务器获取 */
        if(!from_async){
          DB.setItem(‘shop-car‘, JSON.stringify(shopCar = {}))
        }
        this.$store = store
        this.shopCarDB = from_async
      }
      static async build(store){
          let data = await axios.get(url)
          return new ShopCarTool(store,async_result);
      }
      length() {//获取购物车商品数量小角标
        var n = 0;
        for(var i in this.shopCarDB){
          n += this.shopCarDB[i].length
        }
        return n
      }
    }
所以你哪你要实例化也改成(tips: 代码没有经过严格验证,就是这么个意思,)
var tool = await ShopCarTool.build(store)
 


以上是关于JS里Object constructor和Prototype,麻烦解释下的主要内容,如果未能解决你的问题,请参考以下文章

js类的constructor中不支持异步函数吗?

JS中object与constructor的分析

原型 原型链和对象是怎么实现继承的

typeofinstanceof和constructor

Object.prototype.__proto__ Object.prototype和 Object.prototype.constructor

js中的constructor