簡體   English   中英

對原型函數的javascript引用在構造函數中未定義

[英]javascript reference to prototype function is undefined in constructor

給定以下對象:

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();

擺弄我所期望的,但是在離子框架下使用ios應用程序進行測試時,結果(通過Safari調試器測試)是:

  window.myFunc1 -> undefined
  window.myFunc2 -> it works!
  window.myFunc3 -> it works!
  window.myFunc4 -> it works!

原型在創建之前是否已附加到對象上?

編輯

附上小提琴和工作示例,微調了問題

如果您以不尋常的方式創建對象,則可能會發生這種情況, this必然會導致與您期望的有所不同。 就我而言,我是從node模塊中導出構造函數,並使用new require('module')();創建對象new require('module')(); ,具有與undefined原型函數相同的效果。

我得到以下結果[…]

我無法重現。 嘗試這個:

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()

原型在創建之前是否已附加到對象上?

嗯不 原型不能真正地附加到不存在的對象上:-)最好將其同時發生,即一個對象是用原型創建的,沒有一個對象就不存在。

您可能要說的是,對象(及其原型)是在執行構造函數之前創建的-是的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM