方法通过原型继承

时间:2012-10-11 03:23:34

标签: javascript

我编写了以下测试代码,我希望obj.my().showTxt()显示“test1”,但没有显示任何内容,我做了什么错误? 谢谢!

<html>
<body>
Primitive and String Objects
<script type="text/javascript">

    function Class1() {
        this.showTxt = function () { alert(this.name) }
    }

    Object.prototype.my = Class1;

    var obj = new Object();
    obj.name = "test1";

    obj.my().showTxt();

</script>

</body>
</html>

2 个答案:

答案 0 :(得分:1)

问题似乎是你的函数Class1没有返回它自己的实例。

这接近你想要达到的目标吗?

function Class1() {
    this.show = function() {
        alert('test');
    }

    return this;
}

Object.prototype.my = Class1;

var obj = new Object();

obj.my().show();

http://jsfiddle.net/a4ZgF/

函数Class1返回undefined(因为它没有return语句)。因此,Object.prototype.my等于undefined,它没有名为showTxt()的函数。通过返回,您现在已经返回了具有该功能的对象。

使用浏览器的调试器将有助于逐步完成每一行,看看发生了什么。

答案 1 :(得分:0)

通过一些重新排列,我认为你可以实现你想做的事情。这是一个例子:

function Class1() {
    this.name = null;
}

Class1.prototype = {
    showTxt: function () { alert(this.name) }
};

var c = new Class1();
c.name = "test1";

c.showTxt();​

<强> JSFiddle Example

虽然我不知道你想要完成什么,但我不确定我们还能在这做什么。您是否尝试使用Object函数扩展每个showTxt()