我确信这真的非常简单,但为什么以下情况不起作用。
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();
如有必要,我可以开始一个新问题。
答案 0 :(得分:6)
我确信这真的非常简单,但为什么以下情况不起作用。
o
是新对象的构造函数,您必须创建一个新对象才能使用原型方法:
var x = new o();
x.print();
为什么这也不起作用
因为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();