1
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变量没有被更新。显然这就是它不起作用的原因,但为什么我对原型的分配不起作用?

4

2 回答 2

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())
于 2013-01-15T00:10:42.473 回答
2

你错过了原型的两个非常重要的方面。

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

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

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

比使用关键字启动对象的实例new

new foo();

就像 OOP,只是不是 :)

http://jsfiddle.net/46fPe/

于 2013-01-15T00:10:35.237 回答