0

我确信这真的非常简单,但是为什么以下不起作用。

var o = function() { };
o.prototype.print = function( ) { console.log("hi") };
o.print(); // console message: Object function o() { } has no method 'print'

在这里提琴

更新

为什么这也不起作用

var o = function() { };
o.prototype.print = function( ) { console.log("hi") };
var c = Object.create( o );
c.print();

如有必要,我可以开始一个新问题。

4

3 回答 3

6

1. 问题

我确信这真的非常简单,但是为什么以下不起作用。

o 是新对象的构造函数,您必须创建一个新对象才能使用原型方法:

var x = new o();
x.print();

2. 问题

为什么这也不起作用

因为Object.create需要一个原型而不是一个对象:

var o = function() { };
o.prototype.print = function( ) { console.log("hi") };
var c = Object.create( o.prototype );
c.print();

也可以看看

于 2012-11-13T12:11:21.397 回答
1

您需要o用作对象的构造函数。该对象将继承 的原型o

var o = function() { };
o.prototype.print = function( ) { console.log("hi") };
a = new o(); //a inherits prototype of constructor o
a.print();

类似地,由于o它本身是 的一个实例Function,它继承了它的原型。考虑以下事实var o = function(){}

var o = new Function (""); //o inherits prototype of constructor Function
于 2012-11-13T12:11:20.603 回答
0
函数 MyObject(){ };
var o = new MyObject();
MyObject.prototype.print = function() { console.log("hi") };
o.print();
于 2012-11-13T12:16:22.597 回答