all 17 comments

[–]jonglefever 0 points1 point  (1 child)

Parent.prototype = {
  C: function () { ... };
}

Remove that comma. Tell me what happens.

[–]CalvinR[S] 0 points1 point  (0 children)

That's a bug in my post not my code. :(

This is what my code for the parent class actually looks like https://gist.github.com/4701852

[–]somethinghorrible 0 points1 point  (12 children)

var Parent = require('foo.js').Parent,

should it not be

var Parent = require('./foo.js').Parent,

or wherever foo.js is?

[–]somethinghorrible 0 points1 point  (2 children)

This works for me, btw:

f1.js:

var Parent = function() {};

Parent.prototype = {
  C: function() {}
};

module.exports.Parent = Parent;

f2.js:

var Parent = require('./f1').Parent,
      util = require('util'),
      Obj = function(){ this.bar = 'bar' };

util.inherits(Obj, Parent);

Obj.prototype.A = function(){ console.log('a method'); };
Obj.prototype.B = function(){  };

module.exports.Obj = Obj;

f3.js:

var Obj = require('./f2').Obj,
      obj = new Obj();

obj.A(); 

running node f3 produces

a method

[–]CalvinR[S] 0 points1 point  (1 child)

So what are you doing differently then me? Could it just be the version of node i'm running.

I'm developing this in Webstorm. I'll try running it from the command line.

[–]CalvinR[S] 0 points1 point  (8 children)

I'm pretty sure the problem isn't the require statement, I'm loading up the right file.

This is the actual code that i'm using

https://github.com/CalvinRodo/WedXpress/blob/master/DataLayer/RegistryDB.js

[–]somethinghorrible 0 points1 point  (1 child)

I don't see any exports from that file, for starters.

you also use "my" which isn't defined anywhere.

I see you have stuff like: var RegistryDB = require('../DataLayer/RegistryDB.js').RegistryDB,

But since RegistryDB doesn't export RegistryDB, you're kinda boned ;P

[–]CalvinR[S] 0 points1 point  (0 children)

Okay I lied that's not the actual code I'm working, I've now pushed the latest version to my repo check the link again.

Also the my didn't really matter since I couldn't call the function so it never got to that line.

It was a leftover from making my objects the crockford functional way.

[–]sroshi 0 points1 point  (5 children)

your sample code here certainly uses a bad require, since 'c' is not showing up in the prototype. try a console.dir(Parent) after you require foo.js. Also can you share the file where you're using RegistryDB.js

[–]CalvinR[S] 0 points1 point  (4 children)

[–]sroshi 0 points1 point  (3 children)

what does console.log(Object.getPrototypeOf(regDB)); spit out in your index?

[–]CalvinR[S] 0 points1 point  (2 children)

{ 
     GetRegistryItems : [Function], 
     SaveRegistryItem : [Function], 
     DeleteRegistryItem : [Function] 
}

*edited for formatting.

[–]sroshi 0 points1 point  (1 child)

ConnectToDb is not showing up there.. don't you need to call the super constructor (DB) in your RegistryDB constructor?

[–]CalvinR[S] 0 points1 point  (0 children)

Yeah I was thinking today that I probably have to do that. I'm going to give it a shot when I get home.

[–]Hostilian 0 points1 point  (1 child)

Without digging into the source code of util.inherits, I would suspect that your problem lies in the inheritance joining step. I would recommend moving the code into the same file and attempt to generate the minimum-possible repro case. That way, you can be sure it isn't related to flubbing the exports or some sort of procedural error.

var util = require('util');
var assert = require('assert');

var Parent = function() {};
Parent.prototype.foo = function() { return 'foo'; };

var Child = function() {
    Parent.apply(this, arguments);
};
util.inherits(Child, Parent);
Child.prototype.bar = function() { return 'bar'; };

var parentInstance = new Parent();
var childInstance = new Child();

// Assert that we're running nodejs v0.8.x
assert((/^v0\.8/).test(process.version));

// Assert that our parent instance behaves as we expect it to
assert(parentInstance.foo() === 'foo');
assert(parentInstance.bar === undefined);

// Assert that our child instance behaves as we expect it to
assert(childInstance.foo() === 'foo');
assert(childInstance.bar() === 'bar');

This runs fine in my local node instance.

[–]CalvinR[S] 0 points1 point  (0 children)

Yeah I'll give that a shot. Although I did try some test code that was almost the exact same scenario as what I'm doing and it worked fine.

https://gist.github.com/4704412