原型继承 - 为什么这不起作用?

时间:2013-01-15 00:00:31

标签: javascript prototype

example = {};

example.Math = {
  sin: function() {console.log('sin');},
  cos: function() {console.log('cos');}
};

foo = function(){
   sin(); 
};
foo.prototype = window.example.Math;

console.log(foo.prototype)
console.log(foo.cos)
console.log(foo())

http://jsfiddle.net/Mubqy/9/

据我所知,我理解通过范围链搜索引用。所以从理论上讲,如果我将一个对象定义为原型定义的函数,我应该得到对象的所有这些函数和字段,所以我想。我的理解错误在哪里?上述两种情况都不起作用。此外,内部 proto 变量未更新。显然这就是为什么它不起作用,但为什么我对原型的分配不起作用呢?

2 个答案:

答案 0 :(得分:4)

我认为您需要意识到原型方法需要使用new关键字运行,并且需要使用this来访问其变量和方法,如下所示:

example = {};

example.Math = {
  sin: function() {console.log('sin');},
  cos: function() {console.log('cos');}
};

foo = function(){
   this.sin(); 
};
foo.prototype = window.example.Math;

console.log(foo.prototype)
console.log(foo.cos)
console.log(new foo())

答案 1 :(得分:2)

你错过了原型的两个非常关键的方面。

  • 原型充当对象的父级
  • 您必须启动对象的实例

首先,使用关键字this来访问对象的方法和变量:

var foo = function(){
   this.sin(); 
};

使用关键字new

启动对象的实例
new foo();

就像OOP一样,但不是:)

http://jsfiddle.net/46fPe/