编程语言
首页 > 编程语言> > Javascript:原型方法错误?

Javascript:原型方法错误?

作者:互联网

这段代码我得到“TestFunc is not defined”错误…

/* my_object.js */
"use strict";
function MyObject (param) {
    this.param = param;
}

MyObject.prototype.TestFunc = function () {
    console.log ('in TestFunc');
}

MyObject.prototype.RealFunc = function () {
    // I have tried 3 different ways to call TestFunc:
    // 1.
    this.TestFunc ();

    // 2.
    TestFunc ();

    // 3. (I didn't really think this would work,
    //     but thought it was worth a try...)
    MyObject.TestFunc ();
}

…从这段代码中运行:

/* index.js */
var myObj = new MyObject ('test');
myObj.RealFunc (); // Firebug: "TestFunc is not defined"

解决方法:

// 1.
this.TestFunc ();

没关系.这将是有效的,其他调用被删除.

(好吧,只要你不从它的所有者剥离RealFunc并自己调用它,就像var method = myObj.RealFunc; method();或者通过事件处理程序或超时一样,它就可以工作.在这种情况下,这个在RealFunc中,它不是MyObject实例,你需要查看闭包或Function.bind才能使它工作.)

// 2.
TestFunc ();

不,TestFunc未定义为本地或全局范围内的变量.这会导致您从Firebug获得错误.

// 3. (I didn't really think this would work,
//     but thought it was worth a try...)
MyObject.TestFunc ();

不,你是对的. :-)这将是MyObject.prototype.TestFunc.call(this),显式完成.

JavaScript通过在内核对象的标准构造函数上放置一些相同的方法来解决这个问题,就像它们的原型一样(例如String.split存在,其中只有String.prototype.split应该存在).但是,除非您明确说出MyObject.TextFunc = MyObject.prototype.TextFunc之类的内容,否则这不会发生在您自己的对象上.

标签:javascript,function-prototypes,use-strict
来源: https://codeday.me/bug/20190627/1300836.html