【问题标题】:Javascript prototype won't update a methodJavascript原型不会更新方法
【发布时间】:2013-04-08 17:20:54
【问题描述】:

我正在学习使用 javascript 的 prototype 功能(不是库)。我以为我可以使用MyObject.prototype.myFunction = function () { ... } 替换对象的方法。显然这行不通。

下面的代码定义了一个对象,并使用prototype 替换了它的功能。在浏览器中运行它,控制台仍然显示原始输出。

    <script type="text/javascript">
        function TestObject() {
            this.testFunction = function() {
                console.log("Original function output");
            }
        }

        // This should replace the method defined in the object.
        TestObject.prototype.testFunction = function() {
            console.log("YOU GOT CHANGED");
        }

        var HelloWorld = new TestObject();

        HellowWorld.testFunction(); // Should output "YOU GOT CHANGED"
    </script>

【问题讨论】:

  • 实例方法会影响任何原型方法。

标签: javascript oop prototype


【解决方案1】:

通过原型链继承的实例方法影子方法

var HelloWorld = new TestObject();
HelloWorld.testFunction(); // finds method on instance
// "Original function output"
delete HelloWorld.testFunction; // delete method from instance
HelloWorld.testFunction(); // not found on instance, look in prototype, found
// "YOU GOT CHANGED"

【讨论】:

    【解决方案2】:

    实际上,在您的构造函数中,您正在覆盖原型。原始代码是原型的代码(在您创建对象后立即绑定,然后再运行它)。

    【讨论】:

    • 当你说“绑定”时,你指的是什么?
    猜你喜欢
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多