[英]JavaScript object inheritance issues
Hi please be patient with me. 嗨,请耐心等待我。 I am a PHP developer entering the world of javaScript. 我是一名进入JavaScript世界的PHP开发人员。 Now I'm building a grid that will contain blocks of different size. 现在,我正在构建一个网格,其中将包含不同大小的块。 I want a base block with all the methods on it and then other blocks that extend this (to use its methods) but with different properties. 我想要一个具有所有方法的基础块,然后再扩展其他块(以使用其方法)但具有不同的属性。 I have done a lot of reading but dont seem to be able to find a consistent method. 我已经读了很多书,但似乎找不到一致的方法。 I have put together some code i though would work but it doesn't. 我整理了一些代码,尽管我可以用,但不能用。 SmallBlock in the example has its own properties but none of Blocks properties 示例中的SmallBlock具有自己的属性,但没有Blocks属性
// Simple extend function to add for creating object inheritance
function extend(Child, Parent) {
var Temp = function(){
Temp.prototype = Parent.prototype;
Child.prototype = new Temp();
Child.prototype.constructor = new Child();
}
}
//__________________________________________________
// ## OBJECT DECLARATIONS ##
//__________________________________________________
//__________________________________________________
// ## BLOCK ##
// Base object representing a block/tile in the grid
var Block = function(){
// The X position block
this.positionX = 0;
// The Y position block
this.positionY = 0;
// The height of the block
this.height = 0;
// The width of the block
this.width = 0;
// The horizontal orientation of a block
this.blockHorizontalOrientation = null;
// The vertical orientation of a block
this.blockVerticalOrientation = null;
// Method to set the width of a block
this.setWidth = function(width){
this.width = width;
};
// Method to set the height of a block
this.setHeight = function(height){
this.height = height;
};
// Method to get the width of a block
this.getWidth = function(){
return this.width;
};
// Method to get the height of a block
this.getHeight = function(){
return this.height;
};
// Method to set the X position of a block (in the grid)
this.setPosX = function(posX){
this.positionX = posX;
};
// Method to set the Y position of the block (in the grid)
this.setPosY = function(posY){
this.positionY = posY;
};
// Method to get the Y position of the clock
this.getPosY = function(){
return this.positionY;
};
// Method to get the X position of the clock
this.getPosX = function(){
return this.positionX;
};
// Method to get the horizontal orientation
this.getHOrientation = function(){
return this.blockHorizontalOrientation;
};
// Method to get the vertical orientation
this.getVOrientation = function(){
return this.blockVerticalOrientation;
};
// Method to get the horizontal orientation
this.setHOrientation = function(hOren){
this.blockHorizontalOrientation = hOren;
};
// Method to get the vertical orientation
this.setVOrientation = function(vOren){
this.blockVerticalOrientation = vOren;
};
}
//__________________________________________________
// ## SMALL BLOCK ##
// object representing a small block/tile in the grid -- extends Block
var BlockSmall = function(){
// The X position block
this.positionX = 0;
// The Y position block
this.positionY = 0;
// The height of the block
this.height = 1;
// The width of the block
this.width = 1;
// The horizontal orientation of a block
this.blockHorizontalOrientation = null;
// The vertical orientation of a block
this.blockVerticalOrientation = null;
};
// EXTENDING BLOCK
extend(BlockSmall, Block);
Please can somebody review this code and help by advising what it is i am doing wrong. 请有人可以查看此代码并通过建议我做错了什么来提供帮助。 Again please be patient with me if I am miles out. 同样,如果我很遥远,请耐心等待我。 This is all brand new concepts to me. 这对我来说都是全新的概念。
Well, this should work for inheriting: 好吧,这应该适用于继承:
function extend(Child, Parent) {
Child.prototype = new Parent();
Child.constructor = Child;
}
In your code, you just define a function inside extend
that never gets called. 在您的代码中,您只需在extend
中定义一个永远不会调用的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.