我已经阅读了一些问题,例如this,但我仍然无法使其发挥作用:
这是我的简化测试:
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.eth1
5.usbmon1 (USB bus number 1)
6.eth2
7.usbmon2 (USB bus number 2)
8.any (Pseudo-device that captures on all interfaces)
9.lo
可以在此处测试:http://codepen.io/anon/pen/bqxmPa?editors=0010
1。为什么var person = function(name, job)
{
var self = this;
self.name = null;
self.callMe = function()
{
alert(self.name + ' please!');
};
self.init = function()
{
self.name = name;
setTimeout(function(){self.callMe()}, 1000);
}();
}
...
person.prototype.callMe = function()
{
alert('Mister ' + this.name + ' please!');
};
var jonh = new person('john');
var joe = new person('joe');
函数使用原始函数?
我已经读过我必须使用callMe()
才能使用原型,这使得sens:因为我从this
调用存储在var self
中的函数存储在我以后的原型不会修改var ...但是如果我不将self.init()
存储在this
中,我该如何进行回调?
2。如果我覆盖self
之类的callMe
它会做同样的事情,那我为什么要使用原型?
我也理解在原型中放置一个方法对性能有好处,因为它在每个实例中都没有重复,但仍然在它们之间共享。
感谢您的教学!
答案 0 :(得分:1)
1。)这就是原型继承的工作原理。当callMe的回调返回时,代码尝试在回调的执行上下文中解析变量self。由于它没有在那里定义,它上升到原型链并在执行上下文中定义它,在定义callMe和init函数的同一级别上。由于callMe是在这个级别定义的,它只会执行它。如果它没有在这个级别定义,它将执行原型上定义的函数。
2)如果你想订阅OO JS,那么把这些函数放在原型上就可以清楚地表明它们是uhh'接口方法'。你在这里做的是每次你新的'有效地定义实例方法。上课。
这里是我如何将Person类实现为OO
var Person = function(name, job){
this.name = name;
this.init();
};
Person.prototype.init = function(){
setTimeout((function() {
this.callMe();
}).apply(this), 1000);
};
Person.prototype.callMe = function(){
alert('Mister ' + this.name + ' please!');
};
var jonh = new Person('john');
var joe = new Person('joe');