2013-04-04 36 views
1

是否有任何可能的方法來更改實例的原型而不使用__proto__屬性?設置內部原型

我想出了這一點:

x=new String(); 
y=new Array(); 
Object.setPrototypeOf(x,y.__proto__) 

但這仍然使用__proto__

+0

哪種環境給你'Object.setPrototypeOf()'? – alex 2013-04-04 11:46:11

+0

@alex我有一個鏈接[在這裏](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getPrototypeOf)。在描述部分,你可以檢查 – 2013-04-04 11:47:27

+2

在鏈接你只要它說'實際上不可能在不使用__proto__屬性的情況下更改實例的原型' – 2013-04-04 11:49:22

回答

0

也許就像:

function object(o) { 
    function F() {} 
    F.prototype = o; 
    return new F(); 
} 

x = object(y); 

由斯托揚斯特凡從JavaScript的模式兩者

+0

儘管這並不改變現有的原型鏈,但是它創建了一個新的對象,其原型設置爲它的參數。 – alex 2013-04-04 11:52:25

0

一旦你有一個對象,你不能改變它的[[Prototype]]鏈接,而不使用__proto__屬性。

從實用角度來看,您的示例沒有意義。如果您想要使用StringArray的方法,只需調用它們並設置它們的ThisBinding,或者根據需要分配它們。

但是,您可能會創建其[[Prototype]]鏈接指向另一個的新對象。

var obj = Object.create(String.prototype); 

這當然不會修改原始對象。