编程语言
首页 > 编程语言> > javascript – IE9无法识别原型功能?

javascript – IE9无法识别原型功能?

作者:互联网

我正在研究一个AngularJS SPA,我正在使用原型来向通过AJAX作为JSON传入的对象添加行为.假设我刚从AJAX调用中得到了一个时间表x.

我已经定义了Timetable.prototype.SomeMethod = function(),我使用https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf来将x的原型设置为TimeTable.prototype.我也有polyfill.

如果我调用x.SomeMethod(),这适用于IE> 9,FF,Chrome等.然而,IE 9让我很头疼并且说出了一个错误,指出’x没有属性或成员SomeMethod’.

IE中的调试向我显示x的_proto_在函数列表中有SomeMethod(),但是,调用x.SomeMethod()会产生与描述相同的错误.

如何在IE9中完成这项工作?

解决方法:

更多评论而不是答案

“扩展”从一些其他环境中检索的随机对象的主要问题是javascript实际上不允许随机属性名称,例如,随机对象可能具有隐藏继承属性的属性名称.您可以考虑以下内容.

将随机对象纯粹用作数据并将其传递给访问数据并执行所需操作的方法,例如:

function getName(obj) {
    return obj.name;
}

因此,在调用方法时,您将对象传递给作用于对象的函数,您可以直接在对象上添加和修改属性.

另一种方法是使用您想要的方法创建一个实例并将对象的属性复制到该实例,但是您仍然存在不允许随机属性名称的问题.但是,可以通过使用不太可能发生冲突的继承属性的名称来减轻这种情况,例如:以_或__为前缀(这有点难看),或使用命名约定,如getSomething,setSomething,calcLength等.

因此,如果obj代表一个人的数据,您可能会这样做:

// Setup
function Person(obj){
  for (var p in obj) {
    if (obj.hasOwnProperty(p)) {
      this[p] = obj[p];
    } 
  }
}

Person.prototype.getName = function(){
  return this.name;
};

// Object generated from JSON
var dataFred = {name:'fred'};

// Create a new Person based on data
var p = new Person(dataFred);

您甚至可以使用数据对象从各种组织创建实例,例如数据对象可能代表多个人,或一个人及其地址,这可能会创建两个相关对象.

标签:javascript,internet-explorer,prototype,internet-explorer-9
来源: https://codeday.me/bug/20190825/1716332.html