给出以下对象:
function MyObject() {
window.myFunc1 = this.myFunc1;
window.myFunc2 = this.__proto__.myFunc2;
}
MyObject.prototype.anotherFunc = function () {
window.myFunc3 = this.myFunc3;
window.myFunc4 = this.__proto__.myFunc4;
}
MyObject.prototype.myFunc1 = function () { console.log(1); }
MyObject.prototype.myFunc2 = function () { console.log(2); }
MyObject.prototype.myFunc3 = function () { console.log(3); }
MyObject.prototype.myFunc4 = function () { console.log(4); }
var o = new MyObject();
o.anotherFunc();
window.myFunc1();
window.myFunc2();
window.myFunc3();
window.myFunc4();
在fiddle我得到了预期的结果,但是当在离子框架下使用ios应用程序进行测试时,结果(使用safari调试器测试)是:
window.myFunc1 -> undefined
window.myFunc2 -> it works!
window.myFunc3 -> it works!
window.myFunc4 -> it works!
原型是否在创建之前附加到对象上?
修改
附上小提琴和工作实例,微调问题
答案 0 :(得分:1)
如果以不寻常的方式创建对象,可能会发生这种情况,并且this
绑定的内容与您期望的不同。在我的例子中,我从node
模块导出构造函数,并使用new require('module')();
创建一个对象,其原型函数的效果与undefined
相同。
答案 1 :(得分:0)
我得到以下结果[...]
我无法重现。试试这个:
function MyObject() {
console.log(this.myFunc1);
console.log(Object.getPrototypeOf(this).myFunc2);
}
MyObject.prototype.anotherFunc = function () {
console.log(this.myFunc3);
console.log(Object.getPrototypeOf(this).myFunc4);
}
MyObject.prototype.myFunc1 = function () { }
MyObject.prototype.myFunc2 = function () { }
MyObject.prototype.myFunc3 = function () { }
MyObject.prototype.myFunc4 = function () { }
var o = new MyObject();
o.anotherFunc()
呃,不。原型不能真正附加到不存在的对象:-)最好将它视为同时发生,一个对象是用原型创建的,没有一个就不存在。在创建对象之前,未将原型附加到对象上吗?
你可能意味着在执行构造函数之前创建了对象(及其原型) - 是的。