gpt4 book ai didi

Javascript快速原型(prototype)继承?

转载 作者:行者123 更新时间:2023-11-29 15:47:37 27 4
gpt4 key购买 nike

我正在学习 JavaScript,我发现它的原型(prototype)继承方式太冗长了。所以我搜索了一些替代方案,但我发现的所有东西都使用了闭包,并因此显着降低了性能。

我尝试自己编写,它似乎有效。也许我误解了什么,或者出于某种原因这被认为是不好的做法。有更多经验的人可以分享他对这种方法的看法吗?

var Class = {
constructor: function() {},
extend: function(properties) {
var base = this.prototype || Class;
var constructor = properties.hasOwnProperty('constructor') ?
properties.constructor : base.constructor;
constructor.base = base;
constructor.prototype = Object.create(base);
constructor.extend = Class.extend;
for(var p in properties) {
constructor.prototype[p] = properties[p];
}
constructor.prototype.constructor = constructor;
return constructor;
}
};

现场演示:http://jsfiddle.net/xNGAB/

性能:http://jsperf.com/object-construction99/2

编辑:我仍然觉得笨拙的一件事是对基类函数的调用,例如 C.base.constructor.call(this);。我真的不明白为什么 this 在我们执行 C.base.constructor() 时没有得到正确的绑定(bind)。

最佳答案

你应该看看CoffeeScript .它具有类似 Ruby 的语法并编译成 JavaScript。最好的部分是您可以像这样实现原型(prototype)继承(来自他们的用户手册):

class Animal
constructor: (@name) ->

move: (meters) ->
alert @name + " moved #{meters}m."

class Snake extends Animal
move: ->
alert "Slithering..."
super 5

class Horse extends Animal
move: ->
alert "Galloping..."
super 45

sam = new Snake "Sammy the Python"
tom = new Horse "Tommy the Palomino"

关于Javascript快速原型(prototype)继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9250085/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com