2011-12-16 86 views
0

我目前正在尝试测试是否有可能使一个对象从另一个对象继承,而这两个对象都是使用文字创建的。我试图将构造函数和原型互相瞄准,但似乎无论如何,我唯一需要解决的方法就是用一个已有的对象构建一个新的对象。让我知道,米错了。这是我迅速解决问题的尝试。构造函数属性 - 关联预先存在的对象?

Object.relate = function(parent, child){ 
    function F(){}; 
    F.prototype = parent; 
    child.constructor = F; 
} 
alpha = {a:1}; 
beta = {b:2}; 

Object.relate(alpha, beta); 
+1

这是行不通的?它会给你一个错误?你想要达到什么目标?你在哪里遇到麻烦? – 2011-12-16 13:23:40

回答

0

在您的代码beta可以通过使用beta.constructor.prototype访问alpha上定义的属性。

当你在一个函数中使用new

var obj = new F(); 

然后obj.__proto__自动设置为F.prototype。如果您已有对象且未使用new创建对象,则必须自行设置__proto__

obj.__proto__ = F.prototype; 

所以在你的榜样,你需要调用

child.__proto__ = parent; 

资源:

问题是现在每个浏览器都暴露了__proto__属性。 IE不支持它,所以你不能创建一个浏览器兼容的解决方案,而无需实际创建一个新的对象并复制属性。

+0

谢谢您的信息。我试图掌握的是核心语言。 __proto__是一个标准的对象属性,或者是浏览器为了缓解而连接的东西?如果它不存在于特定的浏览器之外,那么它对我来说没有多大价值。然而 - 如果它确实存在但仅限于在IE中进行编辑,那么我会觉得它很有趣(但它听起来像是一个浏览器为我添加了属性) – Marlin 2011-12-16 16:30:18

0

这种方法似乎是为我工作(在Chrome测试):

function relate(parent, child){ 
    child.__proto__ = parent; 
} 

alpha = {a:1}; 
beta = {b:2}; 

relate(alpha, beta); 

console.log(beta.a); 

输出:1。

相关问题