We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
douglas crockford在2006年曾提出过javascript正确的原型继承方式:http://javascript.crockford.com/prototypal.html
js本身是基于原型来实现继承的编程语言,而对new这个keywod及其用法的引入,是希望那些习惯了类继承方式的程序员,能够接受js。
而js已经面世很久了,久到大家都在讨论js还能活多久了,,js工程师们也已经理解原型继承是怎么回事了,那么使用new的这个过渡方案还应该被推崇么?
老道07年写了一段js实现原型继承:
Object.prototype.begetObject = function () { function F() {} F.prototype = this; return new F(); }; newObject = oldObject.begetObject();
我个人从审美上认为,老道的这个实现是比下面的方式更优雅也更体现了原型继承的:
function OldClass(){} function NewClass(){} NewClass.prototype = new OldClass; newObject = new NewClass();
对于原型的“污染”,其实我也可以接受,为什么要用“污染”这种贬义描述,其实是仁者见仁的事情。
假若我们不愿意对Object.prototype原型有所“污染”,那么我们可以定义自己的基本对象:
var create = Object.create || function(o){function F(){} F.prototype=o; return new F}; BaseObject = { create: function(obj){ return create(this); } }; var oldObject = BaseObject.create(); oldObject.o = 1; var newObject1 = oldObject.create(); newObject1.n = 1; var newObject2 = oldObject.create(); newObject2.n = 2; console.log(newObject1, newObject2);
这种原型继承,丝毫不拖泥带水,彻底让我们从new这个关键字中解放出来,而且也优雅的维护了javascript继承的原型链,你所需要理解的仅仅是:
每个对象都支持create方法,可以创建一个以自身为原型的新对象,仅此而已。
The text was updated successfully, but these errors were encountered:
DC现在的观点是压根不用this,所以更不用说prototype和new。
但是所有人都知道DC一贯是opinionated,只代表了一小撮人的意见。
我个人还是建议用普遍的OO方式。原因:
Sorry, something went wrong.
@hax 专业的回答!
acodercc
No branches or pull requests
douglas crockford在2006年曾提出过javascript正确的原型继承方式:http://javascript.crockford.com/prototypal.html
js本身是基于原型来实现继承的编程语言,而对new这个keywod及其用法的引入,是希望那些习惯了类继承方式的程序员,能够接受js。
而js已经面世很久了,久到大家都在讨论js还能活多久了,,js工程师们也已经理解原型继承是怎么回事了,那么使用new的这个过渡方案还应该被推崇么?
老道07年写了一段js实现原型继承:
我个人从审美上认为,老道的这个实现是比下面的方式更优雅也更体现了原型继承的:
对于原型的“污染”,其实我也可以接受,为什么要用“污染”这种贬义描述,其实是仁者见仁的事情。
假若我们不愿意对Object.prototype原型有所“污染”,那么我们可以定义自己的基本对象:
这种原型继承,丝毫不拖泥带水,彻底让我们从new这个关键字中解放出来,而且也优雅的维护了javascript继承的原型链,你所需要理解的仅仅是:
每个对象都支持create方法,可以创建一个以自身为原型的新对象,仅此而已。
The text was updated successfully, but these errors were encountered: