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