<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.tomtalk.net/index.php?action=history&amp;feed=atom&amp;title=Jsoop</id>
		<title>Jsoop - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.tomtalk.net/index.php?action=history&amp;feed=atom&amp;title=Jsoop"/>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=Jsoop&amp;action=history"/>
		<updated>2026-04-24T09:40:52Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>http://wiki.tomtalk.net/index.php?title=Jsoop&amp;diff=5363&amp;oldid=prev</id>
		<title>Tom：/* javascript的bind()方法 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=Jsoop&amp;diff=5363&amp;oldid=prev"/>
				<updated>2017-12-14T02:11:52Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;javascript的bind()方法&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2017年12月14日 (四) 02:11的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第604行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第604行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;arg1, arg2, ...：当新的 Function 被调用时，当作参数列表传入，插入在调用时实际参数之前。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;arg1, arg2, ...：当新的 Function 被调用时，当作参数列表传入，插入在调用时实际参数之前。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 示例一： 通过 bind() 修改函数调用时的 this&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===示例一： 通过 bind() 修改函数调用时的 this&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第635行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第635行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 示例二： 通过 bind() 传入参数&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===示例二： 通过 bind() 传入参数&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第673行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第673行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ECMAScript 是标准，ECMA-262，目前最新的是第5版。一般 Firefox 的实现叫做 JavaScript（最新在 Firefox4中支持到 JavaScript 1.8.5）；IE 中的实现叫 JScript。两者都是支持 ECMAScript 第三版的，但是对第五版的支持可能就不完全了。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ECMAScript 是标准，ECMA-262，目前最新的是第5版。一般 Firefox 的实现叫做 JavaScript（最新在 Firefox4中支持到 JavaScript 1.8.5）；IE 中的实现叫 JScript。两者都是支持 ECMAScript 第三版的，但是对第五版的支持可能就不完全了。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 示例三&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===示例三&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tom</name></author>	</entry>

	<entry>
		<id>http://wiki.tomtalk.net/index.php?title=Jsoop&amp;diff=5362&amp;oldid=prev</id>
		<title>Tom：/* javascript的bind()方法 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=Jsoop&amp;diff=5362&amp;oldid=prev"/>
				<updated>2017-12-14T02:11:31Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;javascript的bind()方法&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2017年12月14日 (四) 02:11的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第604行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第604行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;arg1, arg2, ...：当新的 Function 被调用时，当作参数列表传入，插入在调用时实际参数之前。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;arg1, arg2, ...：当新的 Function 被调用时，当作参数列表传入，插入在调用时实际参数之前。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;### &lt;/del&gt;示例一： 通过 bind() 修改函数调用时的 this&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=== &lt;/ins&gt;示例一： 通过 bind() 修改函数调用时的 this&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第635行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第635行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;### &lt;/del&gt;示例二： 通过 bind() 传入参数&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=== &lt;/ins&gt;示例二： 通过 bind() 传入参数&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第673行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第673行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ECMAScript 是标准，ECMA-262，目前最新的是第5版。一般 Firefox 的实现叫做 JavaScript（最新在 Firefox4中支持到 JavaScript 1.8.5）；IE 中的实现叫 JScript。两者都是支持 ECMAScript 第三版的，但是对第五版的支持可能就不完全了。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ECMAScript 是标准，ECMA-262，目前最新的是第5版。一般 Firefox 的实现叫做 JavaScript（最新在 Firefox4中支持到 JavaScript 1.8.5）；IE 中的实现叫 JScript。两者都是支持 ECMAScript 第三版的，但是对第五版的支持可能就不完全了。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;### &lt;/del&gt;示例三&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;=== &lt;/ins&gt;示例三&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tom</name></author>	</entry>

	<entry>
		<id>http://wiki.tomtalk.net/index.php?title=Jsoop&amp;diff=5361&amp;oldid=prev</id>
		<title>Tom：/* javascript的bind()方法 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=Jsoop&amp;diff=5361&amp;oldid=prev"/>
				<updated>2017-12-14T02:11:00Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;javascript的bind()方法&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2017年12月14日 (四) 02:11的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第604行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第604行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;arg1, arg2, ...：当新的 Function 被调用时，当作参数列表传入，插入在调用时实际参数之前。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;arg1, arg2, ...：当新的 Function 被调用时，当作参数列表传入，插入在调用时实际参数之前。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;示例一： 通过 bind() 修改函数调用时的 this&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;### &lt;/ins&gt;示例一： 通过 bind() 修改函数调用时的 this&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第635行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第635行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;示例二： 通过 bind() 传入参数&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;### &lt;/ins&gt;示例二： 通过 bind() 传入参数&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第673行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第673行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ECMAScript 是标准，ECMA-262，目前最新的是第5版。一般 Firefox 的实现叫做 JavaScript（最新在 Firefox4中支持到 JavaScript 1.8.5）；IE 中的实现叫 JScript。两者都是支持 ECMAScript 第三版的，但是对第五版的支持可能就不完全了。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ECMAScript 是标准，ECMA-262，目前最新的是第5版。一般 Firefox 的实现叫做 JavaScript（最新在 Firefox4中支持到 JavaScript 1.8.5）；IE 中的实现叫 JScript。两者都是支持 ECMAScript 第三版的，但是对第五版的支持可能就不完全了。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;示例&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;### 示例三&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tom</name></author>	</entry>

	<entry>
		<id>http://wiki.tomtalk.net/index.php?title=Jsoop&amp;diff=5360&amp;oldid=prev</id>
		<title>Tom：/* javascript的bind()方法 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=Jsoop&amp;diff=5360&amp;oldid=prev"/>
				<updated>2017-12-14T02:10:14Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;javascript的bind()方法&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;2017年12月14日 (四) 02:10的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第672行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第672行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ECMAScript 是标准，ECMA-262，目前最新的是第5版。一般 Firefox 的实现叫做 JavaScript（最新在 Firefox4中支持到 JavaScript 1.8.5）；IE 中的实现叫 JScript。两者都是支持 ECMAScript 第三版的，但是对第五版的支持可能就不完全了。&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ECMAScript 是标准，ECMA-262，目前最新的是第5版。一般 Firefox 的实现叫做 JavaScript（最新在 Firefox4中支持到 JavaScript 1.8.5）；IE 中的实现叫 JScript。两者都是支持 ECMAScript 第三版的，但是对第五版的支持可能就不完全了。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;示例&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;var altwrite = document.write;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;altwrite(&amp;quot;hello&amp;quot;);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;//1.以上代码有什么问题&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;//2.正确操作是怎样的&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;//3.bind()方法怎么实现&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/source&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;对于上面这道题目，答案并不是太难，主要考点就是this指向的问题，altwrite()函数改变this的指向global或window对象，导致执行时提示非法调用异常，正确的方案就是使用bind()方法：&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;altwrite.bind(document)(&amp;quot;hello&amp;quot;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/source&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;当然也可以使用call()方法：&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;altwrite.call(document, &amp;quot;hello&amp;quot;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/source&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tom</name></author>	</entry>

	<entry>
		<id>http://wiki.tomtalk.net/index.php?title=Jsoop&amp;diff=3358&amp;oldid=prev</id>
		<title>Tom：/* 组合 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=Jsoop&amp;diff=3358&amp;oldid=prev"/>
				<updated>2013-03-24T01:59:12Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;组合&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==初探==&lt;br /&gt;
Javascript是一个类C的语言，他的面向对象的东西相对于C++/Java比较奇怪，但是其的确相当的强大。&lt;br /&gt;
&lt;br /&gt;
我们知道Javascript中的变量定义基本如下：&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var name = 'Chen Hao';;&lt;br /&gt;
var email = 'haoel(@)hotmail.com';&lt;br /&gt;
var website = 'http://coolshell.cn';&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
如果要用对象来写的话，就是下面这个样子：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var chenhao = {&lt;br /&gt;
    name :'Chen Hao',&lt;br /&gt;
    email : 'haoel(@)hotmail.com',&lt;br /&gt;
    website : 'http://coolshell.cn'&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
于是，我就可以这样访问：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//以成员的方式&lt;br /&gt;
chenhao.name;&lt;br /&gt;
chenhao.email;&lt;br /&gt;
chenhao.website;&lt;br /&gt;
 &lt;br /&gt;
//以hash map的方式&lt;br /&gt;
chenhao[&amp;quot;name&amp;quot;];&lt;br /&gt;
chenhao[&amp;quot;email&amp;quot;];&lt;br /&gt;
chenhao[&amp;quot;website&amp;quot;];&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
关于函数，我们知道Javascript的函数是这样的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var doSomething = function(){&lt;br /&gt;
   alert('Hello World.');&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
于是，我们可以这么干：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var sayHello = function(){&lt;br /&gt;
   var hello = &amp;quot;Hello, I'm &amp;quot;+ this.name&lt;br /&gt;
                + &amp;quot;, my email is: &amp;quot; + this.email&lt;br /&gt;
                + &amp;quot;, my website is: &amp;quot; + this.website;&lt;br /&gt;
   alert(hello);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
//直接赋值，这里很像C/C++的函数指针&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
chenhao.Hello = sayHello; &lt;br /&gt;
chenhao.Hello();&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
相信这些东西都比较简单，大家都明白了。 可以看到javascript对象函数是直接声明，直接赋值，直接就用了。runtime的动态语言。&lt;br /&gt;
&lt;br /&gt;
还有一种比较规范的写法是：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//我们可以看到， 其用function来做class。&lt;br /&gt;
var Person = function(name, email, website){&lt;br /&gt;
    this.name = name;&lt;br /&gt;
    this.email = email;&lt;br /&gt;
    this.website = website;&lt;br /&gt;
 &lt;br /&gt;
    this.sayHello = function(){&lt;br /&gt;
        var hello = &amp;quot;Hello, I'm &amp;quot;+ this.name  + &amp;quot;, \n&amp;quot; +&lt;br /&gt;
                    &amp;quot;my email is: &amp;quot; + this.email + &amp;quot;, \n&amp;quot; +&lt;br /&gt;
                    &amp;quot;my website is: &amp;quot; + this.website;&lt;br /&gt;
        alert(hello);&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
var chenhao = new Person(&amp;quot;Chen Hao&amp;quot;, &amp;quot;haoel@hotmail.com&amp;quot;, &amp;quot;http://coolshell.cn&amp;quot;);&lt;br /&gt;
chenhao.sayHello();&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
顺便说一下，要删除对象的属性，很简单：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
delete chenhao['email']&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
上面的这些例子，我们可以看到这样几点：&lt;br /&gt;
&lt;br /&gt;
# Javascript的数据和成员封装很简单。没有类完全是对象操作。纯动态！&lt;br /&gt;
# Javascript function中的this指针很关键，如果没有的话，那就是局部变量或局部函数。&lt;br /&gt;
# Javascript对象成员函数可以在使用时临时声明，并把一个全局函数直接赋过去就好了。&lt;br /&gt;
# Javascript的成员函数可以在实例上进行修改，也就是说不同实例相同函数名的行为不一定一样。&lt;br /&gt;
&lt;br /&gt;
==属性配置Object.defineProperty==&lt;br /&gt;
&lt;br /&gt;
先看下面的代码：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//创建对象&lt;br /&gt;
var chenhao = Object.create(null);&lt;br /&gt;
 &lt;br /&gt;
//设置一个属性&lt;br /&gt;
 Object.defineProperty( chenhao,&lt;br /&gt;
                'name', { value:  'Chen Hao',&lt;br /&gt;
                          writable:     true,&lt;br /&gt;
                          configurable: true,&lt;br /&gt;
                          enumerable:   true });&lt;br /&gt;
 &lt;br /&gt;
//设置多个属性&lt;br /&gt;
Object.defineProperties( chenhao,&lt;br /&gt;
    {&lt;br /&gt;
        'email'  : { value:  'haoel@hotmail.com',&lt;br /&gt;
                     writable:     true,&lt;br /&gt;
                     configurable: true,&lt;br /&gt;
                     enumerable:   true },&lt;br /&gt;
        'website': { value: 'http://coolshell.cn',&lt;br /&gt;
                     writable:     true,&lt;br /&gt;
                     configurable: true,&lt;br /&gt;
                     enumerable:   true }&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
下面就说说这些属性配置是什么意思。&lt;br /&gt;
&lt;br /&gt;
* writable：这个属性的值是否可以改。&lt;br /&gt;
* configurable：这个属性的配置是否可以改。&lt;br /&gt;
* enumerable：这个属性是否能在for…in循环中遍历出来或在Object.keys中列举出来。&lt;br /&gt;
* value：属性值。&lt;br /&gt;
* get()/set(_value)：get和set访问器。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Get/Set 访问器&lt;br /&gt;
&lt;br /&gt;
关于get/set访问器，它的意思就是用get/set来取代value（其不能和value一起使用），示例如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var  age = 0;&lt;br /&gt;
Object.defineProperty( chenhao,&lt;br /&gt;
            'age', {&lt;br /&gt;
                      get: function() {return age+1;},&lt;br /&gt;
                      set: function(value) {age = value;}&lt;br /&gt;
                      enumerable : true,&lt;br /&gt;
                      configurable : true&lt;br /&gt;
                    }&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
chenhao.age = 100; //调用set&lt;br /&gt;
alert(chenhao.age); //调用get 输出101（get中+1了）;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
我们再看一个更为实用的例子——利用已有的属性(age)通过get和set构造新的属性(birth_year)：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Object.defineProperty( chenhao,&lt;br /&gt;
            'birth_year',&lt;br /&gt;
            {&lt;br /&gt;
                get: function() {&lt;br /&gt;
                    var d = new Date();&lt;br /&gt;
                    var y = d.getFullYear();&lt;br /&gt;
                    return ( y - this.age );&lt;br /&gt;
                },&lt;br /&gt;
                set: function(year) {&lt;br /&gt;
                    var d = new Date();&lt;br /&gt;
                    var y = d.getFullYear();&lt;br /&gt;
                    this.age = y - year;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
);&lt;br /&gt;
 &lt;br /&gt;
alert(chenhao.birth_year);&lt;br /&gt;
chenhao.birth_year = 2000;&lt;br /&gt;
alert(chenhao.age);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这样做好像有点麻烦，你说，我为什么不写成下面这个样子：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var chenhao = {&lt;br /&gt;
    name: &amp;quot;Chen Hao&amp;quot;,&lt;br /&gt;
    email: &amp;quot;haoel@hotmail.com&amp;quot;,&lt;br /&gt;
    website: &amp;quot;http://coolshell.cn&amp;quot;,&lt;br /&gt;
    age: 100,&lt;br /&gt;
    get birth_year() {&lt;br /&gt;
        var d = new Date();&lt;br /&gt;
        var y = d.getFullYear();&lt;br /&gt;
        return ( y - this.age );&lt;br /&gt;
    },&lt;br /&gt;
    set birth_year(year) {&lt;br /&gt;
        var d = new Date();&lt;br /&gt;
        var y = d.getFullYear();&lt;br /&gt;
        this.age = y - year;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alert(chenhao.birth_year);&lt;br /&gt;
chenhao.birth_year = 2000;&lt;br /&gt;
alert(chenhao.age);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
是的，你的确可以这样的，不过通过defineProperty()你可以干这些事：&lt;br /&gt;
&lt;br /&gt;
# 设置如 writable，configurable，enumerable 等这类的属性配置。&lt;br /&gt;
# 动态地为一个对象加属性。比如：一些HTML的DOM对像。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;查看对象属性配置&lt;br /&gt;
&lt;br /&gt;
如果查看并管理对象的这些配置，下面有个程序可以输出对象的属性和配置等东西：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//列出对象的属性.&lt;br /&gt;
function listProperties(obj)&lt;br /&gt;
{&lt;br /&gt;
    var newLine = &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
    var names = Object.getOwnPropertyNames(obj);&lt;br /&gt;
    for (var i = 0; i &amp;lt; names.length; i++) {&lt;br /&gt;
        var prop = names[i];&lt;br /&gt;
        document.write(prop + newLine);&lt;br /&gt;
 &lt;br /&gt;
        // 列出对象的属性配置（descriptor）动用getOwnPropertyDescriptor函数。&lt;br /&gt;
        var descriptor = Object.getOwnPropertyDescriptor(obj, prop);&lt;br /&gt;
        for (var attr in descriptor) {&lt;br /&gt;
            document.write(&amp;quot;...&amp;quot; + attr + ': ' + descriptor[attr]);&lt;br /&gt;
            document.write(newLine);&lt;br /&gt;
        }&lt;br /&gt;
        document.write(newLine);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
listProperties(chenhao);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;call, apply, bind 和 this&lt;br /&gt;
&lt;br /&gt;
关于Javascript的this指针，和C++/Java很类似。 我们来看个示例：（这个示例很简单了，我就不多说了）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function print(text){&lt;br /&gt;
    document.write(this.value + ' - ' + text+ '&amp;lt;br&amp;gt;');&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
var a = {value: 10, print : print};&lt;br /&gt;
var b = {value: 20, print : print};&lt;br /&gt;
 &lt;br /&gt;
print('hello');// this =&amp;gt; global, output &amp;quot;undefined - hello&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
a.print('a');// this =&amp;gt; a, output &amp;quot;10 - a&amp;quot;&lt;br /&gt;
b.print('b'); // this =&amp;gt; b, output &amp;quot;20 - b&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
a['print']('a'); // this =&amp;gt; a, output &amp;quot;10 - a&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
我们再来看看call 和 apply，这两个函数的差别就是参数的样子不一样，另一个就是性能不一样，apply的性能要差很多。（关于性能，可到 JSPerf 上去跑跑看看）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
print.call(a, 'a'); // this =&amp;gt; a, output &amp;quot;10 - a&amp;quot;&lt;br /&gt;
print.call(b, 'b'); // this =&amp;gt; b, output &amp;quot;20 - b&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
print.apply(a, ['a']); // this =&amp;gt; a, output &amp;quot;10 - a&amp;quot;&lt;br /&gt;
print.apply(b, ['b']); // this =&amp;gt; b, output &amp;quot;20 - b&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
但是在bind后，this指针，可能会有不一样，但是因为Javascript是动态的。如下面的示例&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var p = print.bind(a);&lt;br /&gt;
p('a');             // this =&amp;gt; a, output &amp;quot;10 - a&amp;quot;&lt;br /&gt;
p.call(b, 'b');     // this =&amp;gt; a, output &amp;quot;10 - b&amp;quot;&lt;br /&gt;
p.apply(b, ['b']);  // this =&amp;gt; a, output &amp;quot;10 - b&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==继承和重载==&lt;br /&gt;
&lt;br /&gt;
通过上面的那些示例，我们可以通过Object.create()来实际继承，请看下面的代码，Student继承于Object。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var Person = Object.create(null);&lt;br /&gt;
 &lt;br /&gt;
Object.defineProperties&lt;br /&gt;
(&lt;br /&gt;
    Person,&lt;br /&gt;
    {&lt;br /&gt;
        'name'  : {  value: 'Chen Hao'},&lt;br /&gt;
        'email'  : { value : 'haoel@hotmail.com'},&lt;br /&gt;
        'website': { value: 'http://coolshell.cn'}&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
 &lt;br /&gt;
Person.sayHello = function () {&lt;br /&gt;
    var hello = &amp;quot;&amp;lt;p&amp;gt;Hello, I am &amp;quot;+ this.name  + &amp;quot;, &amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                &amp;quot;my email is: &amp;quot; + this.email + &amp;quot;, &amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                &amp;quot;my website is: &amp;quot; + this.website;&lt;br /&gt;
    document.write(hello + &amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
var Student = Object.create(Person);&lt;br /&gt;
Student.no = &amp;quot;1234567&amp;quot;; //学号&lt;br /&gt;
Student.dept = &amp;quot;Computer Science&amp;quot;; //系&lt;br /&gt;
 &lt;br /&gt;
//使用Person的属性&lt;br /&gt;
document.write(Student.name + ' ' + Student.email + ' ' + Student.website +'&amp;lt;br&amp;gt;');&lt;br /&gt;
 &lt;br /&gt;
//使用Person的方法&lt;br /&gt;
Student.sayHello();&lt;br /&gt;
 &lt;br /&gt;
//重载SayHello方法&lt;br /&gt;
Student.sayHello = function (person) {&lt;br /&gt;
    var hello = &amp;quot;&amp;lt;p&amp;gt;Hello, I am &amp;quot;+ this.name  + &amp;quot;, &amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                &amp;quot;my email is: &amp;quot; + this.email + &amp;quot;, &amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                &amp;quot;my website is: &amp;quot; + this.website + &amp;quot;, &amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                &amp;quot;my student no is: &amp;quot; + this. no + &amp;quot;, &amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                &amp;quot;my departent is: &amp;quot; + this. dept;&lt;br /&gt;
    document.write(hello + '&amp;lt;br&amp;gt;');&lt;br /&gt;
}&lt;br /&gt;
//再次调用&lt;br /&gt;
Student.sayHello();&lt;br /&gt;
 &lt;br /&gt;
//查看Student的属性（只有 no 、 dept 和 重载了的sayHello）&lt;br /&gt;
document.write('&amp;lt;p&amp;gt;' + Object.keys(Student) + '&amp;lt;br&amp;gt;');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
通用上面这个示例，我们可以看到，Person里的属性并没有被真正复制到了Student中来，但是我们可以去存取。这是因为Javascript用委托实现了这一机制。其实，这就是Prototype，Person是Student的Prototype。&lt;br /&gt;
&lt;br /&gt;
当我们的代码需要一个属性的时候，Javascript的引擎会先看当前的这个对象中是否有这个属性，如果没有的话，就会查找他的Prototype对象是否有这个属性，一直继续下去，直到找到或是直到没有Prototype对象。&lt;br /&gt;
&lt;br /&gt;
为了证明这个事，我们可以使用Object.getPrototypeOf()来检验一下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Student.name = 'aaa';&lt;br /&gt;
 &lt;br /&gt;
//输出 aaa&lt;br /&gt;
document.write('&amp;lt;p&amp;gt;' + Student.name + '&amp;lt;/p&amp;gt;');&lt;br /&gt;
 &lt;br /&gt;
//输出 Chen Hao&lt;br /&gt;
document.write('&amp;lt;p&amp;gt;' +Object.getPrototypeOf(Student).name + '&amp;lt;/p&amp;gt;');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
于是，你还可以在子对象的函数里调用父对象的函数，就好像C++里的 Base::func() 一样。于是，我们重载hello的方法就可以使用父类的代码了，如下所示：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//新版的重载SayHello方法&lt;br /&gt;
Student.sayHello = function (person) {&lt;br /&gt;
    Object.getPrototypeOf(this).sayHello.call(this);&lt;br /&gt;
    var hello = &amp;quot;my student no is: &amp;quot; + this. no + &amp;quot;, &amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                &amp;quot;my departent is: &amp;quot; + this. dept;&lt;br /&gt;
    document.write(hello + '&amp;lt;br&amp;gt;');&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这个很强大吧。&lt;br /&gt;
&lt;br /&gt;
==组合==&lt;br /&gt;
&lt;br /&gt;
上面的那个东西还不能满足我们的要求，我们可能希望这些对象能真正的组合起来。为什么要组合？因为我们都知道是这是OO设计的最重要的东西。不过，这对于Javascript来并没有支持得特别好，不好我们依然可以搞定个事。&lt;br /&gt;
&lt;br /&gt;
首先，我们需要定义一个Composition的函数：（target是作用于是对象，source是源对象），下面这个代码还是很简单的，就是把source里的属性一个一个拿出来然后定义到target中。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function Composition(target, source)&lt;br /&gt;
{&lt;br /&gt;
    var desc  = Object.getOwnPropertyDescriptor;&lt;br /&gt;
    var prop  = Object.getOwnPropertyNames;&lt;br /&gt;
    var def_prop = Object.defineProperty;&lt;br /&gt;
 &lt;br /&gt;
    prop(source).forEach(&lt;br /&gt;
        function(key) {&lt;br /&gt;
            def_prop(target, key, desc(source, key))&lt;br /&gt;
        }&lt;br /&gt;
    )&lt;br /&gt;
    return target;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
有了这个函数以后，我们就可以这来玩了：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//艺术家&lt;br /&gt;
var Artist = Object.create(null);&lt;br /&gt;
Artist.sing = function() {&lt;br /&gt;
    return this.name + ' starts singing...';&lt;br /&gt;
}&lt;br /&gt;
Artist.paint = function() {&lt;br /&gt;
    return this.name + ' starts painting...';&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
//运动员&lt;br /&gt;
var Sporter = Object.create(null);&lt;br /&gt;
Sporter.run = function() {&lt;br /&gt;
    return this.name + ' starts running...';&lt;br /&gt;
}&lt;br /&gt;
Sporter.swim = function() {&lt;br /&gt;
    return this.name + ' starts swimming...';&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
Composition(Person, Artist);&lt;br /&gt;
document.write(Person.sing() + '&amp;lt;br&amp;gt;');&lt;br /&gt;
document.write(Person.paint() + '&amp;lt;br&amp;gt;');&lt;br /&gt;
 &lt;br /&gt;
Composition(Person, Sporter);&lt;br /&gt;
document.write(Person.run() + '&amp;lt;br&amp;gt;');&lt;br /&gt;
document.write(Person.swim() + '&amp;lt;br&amp;gt;');&lt;br /&gt;
 &lt;br /&gt;
//看看 Person中有什么？（输出：sayHello,sing,paint,swim,run）&lt;br /&gt;
document.write('&amp;lt;p&amp;gt;' + Object.keys(Person) + '&amp;lt;br&amp;gt;');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prototype和继承==&lt;br /&gt;
&lt;br /&gt;
我们先来说说Prototype。我们先看下面的例程，这个例程不需要解释吧，很像C语言里的函数指针，在C语言里这样的东西见得多了。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var plus = function(x,y){&lt;br /&gt;
    document.write( x + ' + ' + y + ' = ' + (x+y) + '&amp;lt;br&amp;gt;');&lt;br /&gt;
    return x + y;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
var minus = function(x,y){&lt;br /&gt;
    document.write(x + ' - ' + y + ' = ' + (x-y) + '&amp;lt;br&amp;gt;');&lt;br /&gt;
    return x - y;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
var operations = {&lt;br /&gt;
    '+': plus,&lt;br /&gt;
    '-': minus&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
var calculate = function(x, y, operation){&lt;br /&gt;
    return operations[operation](x, y);&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
calculate(12, 4, '+');&lt;br /&gt;
calculate(24, 3, '-');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
那么，我们能不能把这些东西封装起来呢，我们需要使用prototype。看下面的示例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var Cal = function(x, y){&lt;br /&gt;
    this.x = x;&lt;br /&gt;
    this.y = y;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
Cal.prototype.operations = {&lt;br /&gt;
    '+': function(x, y) { return x+y;},&lt;br /&gt;
    '-': function(x, y) { return x-y;}&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
Cal.prototype.calculate = function(operation){&lt;br /&gt;
    return this.operations[operation](this.x, this.y);&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
var c = new Cal(4, 5);&lt;br /&gt;
 &lt;br /&gt;
c.calculate('+');&lt;br /&gt;
c.calculate('-');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这就是prototype的用法，prototype 是javascript这个语言中最重要的内容。网上有太多的文章介始这个东西了。说白了，prototype就是对一对象进行扩展，其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”，这个原型是可定制的（当然，这里没有真正的复制，实际只是委托）。上面的这个例子中，我们扩展了实例Cal，让其有了一个operations的属性和一个calculate的方法。&lt;br /&gt;
&lt;br /&gt;
这样，我们可以通过这一特性来实现继承。还记得我们最最前面的那个Person吧， 下面的示例是创建一个Student来继承Person。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function Person(name, email, website){&lt;br /&gt;
    this.name = name;&lt;br /&gt;
    this.email = email;&lt;br /&gt;
    this.website = website;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
Person.prototype.sayHello = function(){&lt;br /&gt;
    var hello = &amp;quot;Hello, I am &amp;quot;+ this.name  + &amp;quot;, &amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                &amp;quot;my email is: &amp;quot; + this.email + &amp;quot;, &amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
                &amp;quot;my website is: &amp;quot; + this.website;&lt;br /&gt;
    return hello;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
function Student(name, email, website, no, dept){&lt;br /&gt;
    var proto = Object.getPrototypeOf;&lt;br /&gt;
    proto(Student.prototype).constructor.call(this, name, email, website);&lt;br /&gt;
    this.no = no;&lt;br /&gt;
    this.dept = dept;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// 继承prototype&lt;br /&gt;
Student.prototype = Object.create(Person.prototype);&lt;br /&gt;
 &lt;br /&gt;
//重置构造函数&lt;br /&gt;
Student.prototype.constructor = Student;&lt;br /&gt;
 &lt;br /&gt;
//重载sayHello()&lt;br /&gt;
Student.prototype.sayHello = function(){&lt;br /&gt;
    var proto = Object.getPrototypeOf;&lt;br /&gt;
    var hello = proto(Student.prototype).sayHello.call(this) + '&amp;lt;br&amp;gt;';&lt;br /&gt;
    hello += &amp;quot;my student no is: &amp;quot; + this. no + &amp;quot;, &amp;lt;br&amp;gt;&amp;quot; +&lt;br /&gt;
             &amp;quot;my departent is: &amp;quot; + this. dept;&lt;br /&gt;
    return hello;&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
var me = new Student(&lt;br /&gt;
    &amp;quot;Chen Hao&amp;quot;,&lt;br /&gt;
    &amp;quot;haoel@hotmail.com&amp;quot;,&lt;br /&gt;
    &amp;quot;http://coolshell.cn&amp;quot;,&lt;br /&gt;
    &amp;quot;12345678&amp;quot;,&lt;br /&gt;
    &amp;quot;Computer Science&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
document.write(me.sayHello());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==兼容性==&lt;br /&gt;
&lt;br /&gt;
上面的这些代码并不一定能在所有的浏览器下都能运行，因为上面这些代码遵循 ECMAScript 5 的规范，关于ECMAScript 5 的浏览器兼容列表，你可以看这里“ES5浏览器兼容表”。&lt;br /&gt;
&lt;br /&gt;
本文中的所有代码都在Chrome最新版中测试过了。&lt;br /&gt;
&lt;br /&gt;
下面是一些函数，可以用在不兼容ES5的浏览器中：&lt;br /&gt;
&lt;br /&gt;
Object.create()函数&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function clone(proto) {&lt;br /&gt;
    function Dummy() { }&lt;br /&gt;
 &lt;br /&gt;
    Dummy.prototype             = proto;&lt;br /&gt;
    Dummy.prototype.constructor = Dummy;&lt;br /&gt;
 &lt;br /&gt;
    return new Dummy(); //等价于Object.create(Person);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
var me = clone(Person);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
defineProperty()函数&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function defineProperty(target, key, descriptor) {&lt;br /&gt;
    if (descriptor.value){&lt;br /&gt;
        target[key] = descriptor.value;&lt;br /&gt;
    }else {&lt;br /&gt;
        descriptor.get &amp;amp;&amp;amp; target.__defineGetter__(key, descriptor.get);&lt;br /&gt;
        descriptor.set &amp;amp;&amp;amp; target.__defineSetter__(key, descriptor.set);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return target&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
keys()函数&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function keys(object) { var result, key&lt;br /&gt;
    result = [];&lt;br /&gt;
    for (key in object){&lt;br /&gt;
        if (object.hasOwnProperty(key))  result.push(key)&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Object.getPrototypeOf() 函数&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function proto(object) {&lt;br /&gt;
    return !object?                null&lt;br /&gt;
         : '__proto__' in object?  object.__proto__&lt;br /&gt;
         : /* not exposed? */      object.constructor.prototype&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bind 函数&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var slice = [].slice&lt;br /&gt;
 &lt;br /&gt;
function bind(fn, bound_this) { var bound_args&lt;br /&gt;
    bound_args = slice.call(arguments, 2)&lt;br /&gt;
    return function() { var args&lt;br /&gt;
        args = bound_args.concat(slice.call(arguments))&lt;br /&gt;
        return fn.apply(bound_this, args) }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==javascript的bind()方法==&lt;br /&gt;
&lt;br /&gt;
今天被问到 JS 里的 bind，答不出所以然来，Google 学习了一下，作此记录。&lt;br /&gt;
&lt;br /&gt;
Function.prototype.bind 这个方法是 ECMAScript 5 新增加的，在 Firefox 4/Chrome 中都支持，IE8 应该还不支持。&lt;br /&gt;
&lt;br /&gt;
语法：&lt;br /&gt;
&lt;br /&gt;
var bound = fun.bind( thisValue, [, arg1 [, arg2 [ ... ] ] ] );&lt;br /&gt;
&lt;br /&gt;
参数：&lt;br /&gt;
&lt;br /&gt;
thisValue：当新的 Function 被调用时，thisValue 会付给其 this 值。如果使用 new 操作符调用 Function，则忽略 thisValue。&lt;br /&gt;
&lt;br /&gt;
arg1, arg2, ...：当新的 Function 被调用时，当作参数列表传入，插入在调用时实际参数之前。&lt;br /&gt;
&lt;br /&gt;
示例一： 通过 bind() 修改函数调用时的 this&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// 显式作用域&lt;br /&gt;
var x = 9,&lt;br /&gt;
    module = {&lt;br /&gt;
      getX: function() {&lt;br /&gt;
        return this.x;&lt;br /&gt;
      },&lt;br /&gt;
      x: 81&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
//  调用`module.getX()`，作用域为`module`，所以返回`module.x`&lt;br /&gt;
module.getX();&lt;br /&gt;
// &amp;gt; 81&lt;br /&gt;
&lt;br /&gt;
//  在全局作用域中保存一个函数的引用&lt;br /&gt;
var getX = module.getX;&lt;br /&gt;
&lt;br /&gt;
//  调用`getX()`，作用域为全局，所以返回`x`&lt;br /&gt;
getX();&lt;br /&gt;
// &amp;gt; 9&lt;br /&gt;
&lt;br /&gt;
//  使用`module` bind作为作用域保存一个引用&lt;br /&gt;
var boundGetX = getX.bind(module);&lt;br /&gt;
&lt;br /&gt;
//  调用`boundGetX()`，作用域为`module`，所以返回`module.x`&lt;br /&gt;
boundGetX();&lt;br /&gt;
// &amp;gt; 81&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
示例二： 通过 bind() 传入参数&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// 创建一个函数，使用预设的开始参数调用另一个函数&lt;br /&gt;
function List() {&lt;br /&gt;
  var a = [];&lt;br /&gt;
  for (var i = 0; i &amp;lt; arguments.length; i++) {&lt;br /&gt;
    a.push(arguments[i]);&lt;br /&gt;
  }&lt;br /&gt;
  return a;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//  创建一个 list&lt;br /&gt;
var listOne = List(1, 2, 3);&lt;br /&gt;
&lt;br /&gt;
listOne;&lt;br /&gt;
// &amp;gt;  [1, 2, 3]&lt;br /&gt;
&lt;br /&gt;
// 创建一个新函数，给定一个预置的参数&lt;br /&gt;
var leadingZeroList = List.bind(null /* this */, 0);&lt;br /&gt;
&lt;br /&gt;
leadingZeroList();&lt;br /&gt;
// &amp;gt; [0]&lt;br /&gt;
&lt;br /&gt;
leadingZeroList(1);&lt;br /&gt;
// &amp;gt; [0, 1]&lt;br /&gt;
&lt;br /&gt;
leadingZeroList(1, 2);&lt;br /&gt;
// &amp;gt; [0, 1, 2]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最后，要注意的是：&lt;br /&gt;
&lt;br /&gt;
# 在使用 new 操作符调用 bind 创建的新函数时，this 不会被修改，但是参数还是会修改；&lt;br /&gt;
# bind 并不被所有浏览器支持，IE 目前不支持。&lt;br /&gt;
&lt;br /&gt;
ECMAScript 是标准，ECMA-262，目前最新的是第5版。一般 Firefox 的实现叫做 JavaScript（最新在 Firefox4中支持到 JavaScript 1.8.5）；IE 中的实现叫 JScript。两者都是支持 ECMAScript 第三版的，但是对第五版的支持可能就不完全了。&lt;/div&gt;</summary>
		<author><name>Tom</name></author>	</entry>

	</feed>