Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript继承-成员在其中创建_Javascript_Prototypal Inheritance - Fatal编程技术网

Javascript继承-成员在其中创建

Javascript继承-成员在其中创建,javascript,prototypal-inheritance,Javascript,Prototypal Inheritance,我是JS编程新手,试图理解基于原型的继承。下面是我的测试代码,我有一个关于行方法“parseParameters”的问题 正如我所知,当我实例化类Point并编写以下代码时: var p = new Point ({x: 1, y: 1}); alert(p.x); 成员“x”首先在Point类中搜索,然后在其原型(形状)中搜索。是这样吗 并质疑自身:将在何处创建点类或形状(原型)中的成员“x”和“y”? 一句话:我真的应该考虑吗?也许这是一个可以忽略不计的问题,不管成员创建在哪里 var S

我是JS编程新手,试图理解基于原型的继承。下面是我的测试代码,我有一个关于行方法“parseParameters”的问题

正如我所知,当我实例化类Point并编写以下代码时:

var p = new Point ({x: 1, y: 1});
alert(p.x);
成员“x”首先在Point类中搜索,然后在其原型(形状)中搜索。是这样吗

并质疑自身:将在何处创建点类或形状(原型)中的成员“x”和“y”?

一句话:我真的应该考虑吗?也许这是一个可以忽略不计的问题,不管成员创建在哪里

var Shape = function () {}

Shape.prototype = {
    getParameter: function (params, name) {
        return params !== null && params !== undefined
            ? params[name]
            : 0;
    },

    parseParameters: function(params, names) {
        if (params === null || params === undefined) {
            return;
        }

        for(var i = 0; i < names.length; i++) {
            this[names[i]] = params[names[i]];
        }
    }
}

var Point = function (params) {
    this.parseParameters(params, ['x', 'y'])
}

Point.prototype = new Shape;
var Shape=function(){}
Shape.prototype={
getParameter:函数(参数,名称){
返回参数!==null&¶ms!==未定义
?参数[名称]
: 0;
},
parseParameters:函数(参数、名称){
if(参数===null | |参数===未定义){
返回;
}
对于(var i=0;i
p.x

成员“x”首先在Point类中搜索,然后在其原型(形状)中搜索。是这样吗

除此之外,是的。属性名将首先在
p
对象本身上搜索,然后在它确实继承自的对象中搜索(有一个内部链接)

将在何处创建点类或形状(原型)中的成员“x”和“y”

取决于您如何创建它们:-)

在一个简单的赋值中,比如
p.x=1
(这也发生在
parseParameters
this[names[i]]=params[names[i]]
,正如
this===p
)将在
p
对象上创建属性

我真的应该考虑吗?也许无论成员创建在何处都存在

var Shape = function () {}

Shape.prototype = {
    getParameter: function (params, name) {
        return params !== null && params !== undefined
            ? params[name]
            : 0;
    },

    parseParameters: function(params, names) {
        if (params === null || params === undefined) {
            return;
        }

        for(var i = 0; i < names.length; i++) {
            this[names[i]] = params[names[i]];
        }
    }
}

var Point = function (params) {
    this.parseParameters(params, ['x', 'y'])
}

Point.prototype = new Shape;

不,那真的很重要。如果要在prototype对象上创建它们,则从该对象继承的所有对象将共享相同的值。虽然这对函数很有用,但对于像
x
y
这样的数据属性来说,这将是灾难性的,它们在不同的实例中应该是不同的(另请参见示例)。

目前
形状
之间没有联系。由于
Point
没有
parseParameters
方法,您的实例化将失败。已修复!谢谢你,我应该少工作。