Created
April 25, 2012 13:29
-
-
Save petermichaux/2489714 to your computer and use it in GitHub Desktop.
Function.prototype.new
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Function.prototype.new = function() { | |
var obj = Object.create(this.prototype); | |
this.apply(obj, arguments); | |
return obj; | |
}; | |
function Person(name) { | |
this.setName(name); | |
} | |
Person.prototype.getName = function() { | |
return this.name; | |
}; | |
Person.prototype.setName = function(name) { | |
this.name = name; | |
}; | |
var david = Person.new('Dave'); | |
david.getName(); // 'Dave' |
A better way to implement new
is as follows: https://gist.github.com/aaditmshah/6269739
See the following StackOverflow answer: http://stackoverflow.com/a/17345713/783743
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You have 2 big issues. Both are related with the built-in constructors and Object.create. Even and every object inherits from Object.prototype, the objects have hidden internal behavior which depends on the type of the objects. e.g arrays have special setter, functions have call and construct methods etc.
Array.new();
Will create a new native object which inherits from Array.prototype but it would not be true array, because the internal behavior is not inherited trough the prototype chain.
The second problem is again with built-ins which have non-generic methods, e.g.:
String(String.new('')); // TypeError: String.prototype.toString is not generic