为什么这种方法没有方法打印

时间:2012-11-13 12:08:42

标签: javascript

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

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

小提琴here

更新

为什么这也不起作用

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

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

3 个答案:

答案 0 :(得分: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();

另见

答案 1 :(得分: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

答案 2 :(得分:0)

function MyObject(){ };
var o = new MyObject();
MyObject.prototype.print = function( ) { console.log("hi") };
o.print();