添加原型JavaScript对象字面(Adding Prototype to JavaScript

2019-08-21 05:40发布

STORE = {
   item : function() {
  }
};
STORE.item.prototype.add = function() { alert('test 123'); };
STORE.item.add();

我一直在试图找出什么是错与此相当长一段时间。 为什么没有这方面的工作? 然而,它的工作原理,当我使用如下:

STORE.item.prototype.add();

Answer 1:

原型对象是为了将其用于构造函数 ,基本功能是将使用被称为new运算符来创建新的对象实例。

在JavaScript函数是第一类对象,这意味着你可以添加成员,对他们对待他们就像普通的对象:

var STORE = {
   item : function() {
  }
};

STORE.item.add = function() { alert('test 123'); };
STORE.item.add();

一个典型的应用如我之前所说的原型对象的,是当你通过调用new运算符构造函数,例如实例化一个对象:

function SomeObject() {} // a constructor function
SomeObject.prototype.someMethod = function () {};

var obj = new SomeObject();

SomeObject的所有实例将继承成员SomeObject.prototype ,因为这些成员将通过原型链进行访问。

在JavaScript中每个函数都有一个原型对象,因为没有办法知道哪些功能旨在用作构造函数。



Answer 2:

多年后,当JavaScript的(ES2015到达),我们终于Object.setPrototypeOf()方法

 const STORE = { item: function() {} }; Object.setPrototypeOf(STORE.item, { add: function() { alert('test 123'); } }) STORE.item.add(); 



Answer 3:

您可以使用JSON revivers在分析时把你的JSON转换成类对象。 ECMAScript的5草案已经通过在所描述的JSON2齐磊方案http://JSON.org/js.html

var myObject = JSON.parse(myJSONtext, reviver);

可选齐磊参数是一个将被要求在最终结果的各个级别每个键和值的功能。 每个值将由齐磊函数的结果来代替。 这可用于通用对象改造成伪类的实例,或日期字符串转换为Date对象。

myData = JSON.parse(text, function (key, value) {
    var type;
    if (value && typeof value === 'object') {
        type = value.type;
        if (typeof type === 'string' && typeof window[type] === 'function') {
            return new (window[type])(value);
        }
    }
    return value;
});


Answer 4:

在撰写本文时,这是可以通过使用__proto__属性。 万一有人在这里是目前并可能在未来的检查。

const dog = {
    name: 'canine',
    bark: function() {
        console.log('woof woof!')
    }
}

const pug = {}
pug.__proto__ = dog;

pug.bark();

然而,在这种情况下,添加原型推荐的方法是使用的Object.create 。 所以上面的代码将被转换为:

const pug = Object.create(dog)

pug.bark();

或者,你也可以使用Object.setPrototypeOf作为一个答案提及。

希望帮助。



文章来源: Adding Prototype to JavaScript Object Literal