javascript内通过Array方式无法访问prototype内定义的方法

var arrServerPoint = new Array(new ServerPoint());//ServerPoint为一对象类型;

var sp = arrServerPoint[0];
var sp2 = new ServerPoint();

----问题:sp2实例可以访问到ServerPoint的内部方法,而sp实例无法访问到SerberPoint内部方法。为什么呢?----
----ServerPoint类的构造函数如下----*

function ServerPoint(sPoint, sRadius) {
    this.sPoint = sPoint;
    this.sRadius = sRadius;
}

ServerPoint.prototype = {
    constructor: ServerPoint,
    setPoint: function (setPoint) {
        this.sPoint = setPoint;
    },
    getPoint: function () {
        return this.sPoint;
    },
    setRadius: function (setRadius) {
        this.sRadius = setRadius;
    },
    getRadius: function () {
        return this.sRadius;
    },
}

console.log(sp);
//浏览器返回为
图片描述

console.log(sp2);
//浏览器返回为
图片描述

----问题已解决。其实本身我的问题就有点错误。按问题中的源码应该是两个都不会访问到方法。
图片描述
问题中sp,sp2的console.log内容是我直接在我自己项目里测试的结果。我项目中sp2的赋值语句有一个click事件函数包裹。所以才导致sp,sp2的console.log内容不一致。在此产生了困扰。得到了教训,以后应该将问题代码拿出来研究,而不是在项目内。在此感谢kikong,zonxin大大----

阅读 3.6k
2 个回答
----问题:sp2实例可以访问到ServerPoint的内部方法,而sp实例无法访问到SerberPoint内部方法。为什么呢?----
----ServerPoint类的构造函数如下----*

function ServerPoint(sPoint, sRadius) {
    this.sPoint = sPoint;
    this.sRadius = sRadius;
}

ServerPoint.prototype = {
    constructor: ServerPoint,
    setPoint: function (setPoint) {
        this.sPoint = setPoint;
    },
    getPoint: function () {
        return this.sPoint;
    },
    setRadius: function (setRadius) {
        this.sRadius = setRadius;
    },
    getRadius: function () {
        return this.sRadius;
    },
}

var arrServerPoint = new Array(new ServerPoint());//ServerPoint为一对象类型;

var sp = arrServerPoint[0];
var sp2 = new ServerPoint();

//函数声明会被提前,但是赋值语句不会,还是停留在与原来位置

这个没有什么错误吧,你调用sp.setPoint试试?
我倒是觉得 console.log不会显示 prototype里面的东西,所以说我觉得console.log(sp2)跟我想的不一样。

推荐问题
宣传栏