Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make create return an instance with prototype #130

Open
JoeChapman opened this issue Jun 16, 2014 · 7 comments
Open

Make create return an instance with prototype #130

JoeChapman opened this issue Jun 16, 2014 · 7 comments

Comments

@JoeChapman
Copy link

I want to override the handle function returned when create is called. However, I cannot do so because there is not way to get at the definition. How would you feel about a PR that made create return an instance with handle on the prototype?

@ljharb
Copy link
Collaborator

ljharb commented Jun 16, 2014

Can you explain more of your use case? I'm pretty strongly biased against "new" and would prefer to avoid that approach, but maybe we can find another way to achieve what you need.

@JoeChapman
Copy link
Author

Hi,
I would like to be able to override the handle function in order to write a default set of rules for handling errors and success so I don't have to write the same patterns each time.

I can rewrite handle, but only on the form I have created, not on all forms I create from the form 'class'. If form.create returned an instance of a 'class', with 'handle' a prototype of that class, I could partially override the definition of handle.

You would not need to expose the uninstantiated constructor to the consumer of the interface, create could return a new instance.

@ljharb
Copy link
Collaborator

ljharb commented Jun 16, 2014

could you write a function like:

var formCreate = function () {
  var form = forms.create.apply(forms, arguments);
  form.handle = myHandle;
  return form;
};

@JoeChapman
Copy link
Author

would that allow me to call the original handle function from within myHandle?

@ljharb
Copy link
Collaborator

ljharb commented Jun 16, 2014

Sure, you could do:

var formCreate = function () {
  var form = forms.create.apply(forms, arguments);
  var origHandle = form.handle;
  form.handle = function () {
    myHandle.call(this, arguments);
    return origHandle.call(this, arguments);
  };
  return form;
};

@JoeChapman
Copy link
Author

However, it becomes a little awkward when I start separating code into modules because I want to export forms with a new definition of create, not a form object, as above.

@ljharb
Copy link
Collaborator

ljharb commented Jul 5, 2014

You could make a new module joe-forms that takes forms, saves a reference to the original create function, makes a formCreate like the example above and sticks that on .create, and then use joe-forms instead of forms.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants