this的指向大概可以分成四种:
* 作为对象的方法调用
* 作为普通函数调用
* 构造器调用
* Function.prototype.call或Function.prototype.apply调用
1. 作为对象的时候,this指向该对象
var obj = {
a: 1,
getA: function() {
alert(this === obj); //true;
alert(this.a); //1
}
};
obj.getA();
2. 作为普通函数调用,this总是指向全局对象(在浏览器中就是window)
window.name = 'global
继续阅读 »
简介
在[PHP设计模式(八):工厂模式][2]中我们介绍了创建设计模式(Creation
patterns)中的工厂模式,下面我们将介绍另一种原型设计模式(Prototype Method)。
在PHP中,原型设计模式依靠cloning复制对象来实现。通过cloning构造的对象,将大量节省新对象的构造时间。
何时使用原型设计模式?
简单来说,当你希望根据已有的对象来创建新对象时。
为什么会有这种需求?想象一下,你在做细胞分裂的项目,每一个细胞都是一个对象,现在你有一个细胞类,每一个新的细胞都是由这个类生成的,不同的细胞只是内部的状态参数不同。
当分裂到第N代的时候,已经和初代大不一样了,你是愿意使用第N代的副本
继续阅读 »
享元模式的核心是运用共享技术来有效支持大量细粒度的对象。如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了。在JavaScript中,浏览器特别是移动端的浏览器分配的内存不算多,如何节省内存就成了一件非常有意义的事。
初识
假设有个内衣工厂,要50个男模50个女模,你可能会这么写程序:
var Model = function(sex, underwear) {
this.sex = sex;
this.underwear = underwear;
}
Model.prototype.takePhoto = function() {
console.log('sex=' + th
继续阅读 »
先通过一张图来了解一下 prototype 和 __proto__
继续阅读 »
本文将讨论使 JavaScript 函数更有表现力的两个特性:Rest 参数和参数默认值。
Rest 参数
通常,我们需要创建一个可变参数的函数,可变参数是指函数可以接受任意数量的参数。例如,String.prototype.concat 可以接受任何数量的字符串作为参数。使用 Rest 参数,ES6 为我们提供一种新的方式来创建可变参数的函数。
我们来实现一个示例函数 containsAll,用于检查一个字符串中是否包含某些子字符串。例如,containsAll("banana", "b", "nan") 将返回true,containsAll("banana", "c", "nan") 将返回 false。
下面是传统的
继续阅读 »
从一个视频里接触到 JavaScript 的get和set
一般来说,我们是怎么给我们类的属性定义get和set方法的呢
```javascript
var Person = function (age) {
this.age = age;
};
Person.prototype = {
getAge: function () {
return this.age;
},
setAge: function (age) {
this.age = age;
}
};
var p1 = new Person(19);
var p2 = new Person(23);
```
继续阅读 »
原文地址: Building Blockchain in Go. Part 1: Basic Prototype
继续阅读 »
What Is Google C++ Mocking Framework?
When you write a prototype or test, often it's not feasible or wise to rely on real objects entirely. A mock object implements the same interface as a real object (so it can be used as one), but lets you specify at run time how it will be used and what it should do (which methods
继续阅读 »
Array.prototype.sort
这个地方是实现不同而导致的问题,而且我认为这属于一个比较重大的坑。
表现上是:safari 和 chrome 两者的结果返回是不一致的。
// 在chrome中:
[1, 10, 100].sort(x => 10 - x)
//
继续阅读 »
状态模式的关键是区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变。
电灯程序
首先给一个不用状态模式的电灯程序例子:
var Light = function() {
this.state = 'off'; //电灯初始状态off
this.button = null; //电灯开关按钮
};
Light.prototype.init = function() {
var button = document.createElement('button'),
self = this;
button.innerHTML = '开关';
this.button = document.
继续阅读 »