gpt4 book ai didi

javascript - IE9不识别原型(prototype)函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:47:59 26 4
gpt4 key购买 nike

我正在开发 AngularJS SPA,我正在使用原型(prototype)来向通过 AJAX 作为 JSON 传入的对象添加行为。假设我刚刚从 AJAX 调用中获得了时间表 x。

我定义了 Timetable.prototype.SomeMethod = function() 并使用 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf为了将 x 的原型(prototype)设置为 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;
}

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

另一个是用你想要的方法创建一个实例并将对象的属性复制到它,但是你仍然有不允许随机属性名称的问题。但这可以通过使用不太可能发生冲突的继承属性的名称来缓解,例如以 ___ 为前缀(有点难看),或者使用像 getSomethingsetSomething 这样的命名约定, 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 - IE9不识别原型(prototype)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22500685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com