继承对象
我读过Javascript的继承是原型的。这是什么意思?程序员定义的对象如何继承预定义对象(例如 window )的属性? 例如,我需要在我自己的类中使用函数 eval() 。如何才能实现呢?
I have read that Javascript's inheritance is prototypal.What does it mean?How can an object defined by the programer inherit the properties of a predefined object such as window ?
For example I need the function eval() in my own class . How can it be achieved?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
抛开您是否应该从
window
继承的问题,这里有一个简单的示例,演示如何做到这一点:当使用
调用时>new
运算符,Test
函数创建一个Test
的新实例,其原型链接到window
对象。函数的原型可以是任何对象。Setting aside the question of whether you should inherit from
window
, here's a simple example that demonstrates how to do it:When invoked using the
new
operator, theTest
function creates a new instance ofTest
whose prototype is linked to thewindow
object. A function's prototype can be any object.专业提示:不要使用 new 来声明对象。 Object.create 是创建 JavaScript 对象的正确方法。所有现代浏览器都支持它。对于其他浏览器,本文底部有一个不错的垫片:
http://javascript.crockford.com/ prototypal.html
使用“new”的构造函数的一个问题是,如果人们不小心像常规函数一样调用它,它将使用变量
对全局变量(即窗口,如果在浏览器中)进行修改这个
,所以this
应该只保留给原型函数,我更喜欢使用that
而不是this
我个人使用支持
new 的样式obj()
、obj()
和obj.init()
,这可能是一个额外的函数指针,但我认为它增加了语义意义Protip: Don't use
new
for declaring objects. Object.create is the proper way to create JavaScript objects. It's supported in all modern browsers. For other browsers, a nice shim is at the bottom of this article:http://javascript.crockford.com/prototypal.html
One problem with constructors that use 'new' is that if people accidentally call it like a regular function, it will make modifications on the global variable (i.e. window if in the browser) using the variable
this
, sothis
should only be reserved for prototype functions, and I prefer to usethat
instead ofthis
I personally use a style that supports
new obj()
,obj()
, andobj.init()
, which may be one extra function pointer, but I think it adds semantic meaning你到底想要实现什么?
这是原型继承的最简单的方法(不是最好的):
这意味着 obj1 继承了 obj2 的所有属性
我忘记了主要的事情: eval==evil;
更新:
我在上面的代码中犯了错误。那不是继承。这是更新的代码:
这就是继承。现在,
obj
具有在Object2Constructor
和Object1Constructor
中定义的属性 - 父“类”。请参阅下面 CMS 的评论。他是完全正确的。
What do you want exactly echieve to?
Here is the simplest way (not the best) of prototype inheritance:
It means that
obj1
inherits all properties ofobj2
I've forgot the main thing: eval==evil;
UPDATE:
I've made mistakes in the code above. That is not inheritance. Here is updated code:
And that is inharitance. Now
obj
has properties defined inObject2Constructor
andObject1Constructor
- parent 'class'.See CMS's comment below. He is totally right.