2012-07-14 42 views

回答

2

這是它使用__proto__你怎麼做:

var propertiesToInherit = { 'horsepower': 201, 'make': 'Acura' } 
var myCar = {}; 
myCar.__proto__ = propertiesToInherit; 

console.log(myCar.horsepower); // 201 
console.log(myCar.make); // Acura 

話雖這麼說,我會避免這樣做。它看起來像是deprecated

+0

嗯,你是我想到的。但不幸的是,它已被廢棄,如你所說。 – 2012-07-14 02:11:15

+0

是否有你不想使用Object.create的原因?還是標準的功能繼承? – jalbee 2012-07-14 02:15:47

+0

不,但我已經在某處讀過'Object.create()'是一個ECMAScript5特性,所以我很擔心跨瀏覽器的兼容性。我想知道它的替代方案,以防萬一我不得不使用對象文字而不是構造函數。 – 2012-07-14 02:20:31

1

一種可能性是Prototype.js;除其他事項外,它允許您創建和使用更清晰的語法擴展JS類:

// properties are directly passed to `create` method 
var Person = Class.create({ 
    initialize: function(name) { 
    this.name = name; 
    }, 
    say: function(message) { 
    return this.name + ': ' + message; 
    } 
}); 

// when subclassing, specify the class you want to inherit from 
var Pirate = Class.create(Person, { 
    // redefine the speak method 
    say: function($super, message) { 
    return $super(message) + ', yarr!'; 
    } 
}); 

var john = new Pirate('Long John'); 
john.say('ahoy matey'); 
// -> "Long John: ahoy matey, yarr!" 
1

我不知道我是否正確地理解你的問題,但也許你可以試試這個:

var literal = { mobility: true }; 
function Car(){}; 
Car.prototype = literal; 
var myCar = new Car(); 
console.log(myCar.mobility); 

請注意,如果更改文字,則會更改所創建的所有Car實例。

+0

雅,但是可以在沒有製作Car構造函數的情況下實現。我的意思是直接來自'myCar'對象。 – 2012-07-14 01:58:06

+1

你的意思是'var myCar = literal;'?或者,也許你想將文字的內容複製到汽車中? – 2012-07-14 02:00:08

+0

我的意思是我們可以直接從'literal'繼承'myCar',或者以某種方式創建'Car'構造函數,然後'Car.prototype = literal'並從中實例化'myCar'?我的意思是我們可以使用object literal創建'myCar',然後從object'literal'繼承它嗎? – 2012-07-14 02:09:34