Javascript继承-成员在其中创建
我是JS编程新手,试图理解基于原型的继承。下面是我的测试代码,我有一个关于行方法“parseParameters”的问题 正如我所知,当我实例化类Point并编写以下代码时: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
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
方法,您的实例化将失败。已修复!谢谢你,我应该少工作。