js - 关于this、new、原型
1、this误区
# 第三方学习
http://www.cnblogs.com/wangfupeng1988/p/3988422.html
- this不是函数自身的引用,this实际上是在函数被调用时建立的一个绑定,它指向什么,完全是由函数调用者来决定的。
看一个this和new相关的例子,也能很好的说明情况:
var Person = function(name) {
// this 指向当前创建的实例
this.name = name;
};
// 实例化一个Person(通过new实例化时,此时的this指向alice这个对象.你可以打印出来测试一下)
var alice = new Person('alice');
// 不要这么做!这个函数只会返回undefined,并且执行上下文是window(全局)对象,你无意间创建了一个全局变量name。
Person('bob'); //=> undefined
2、new、prototype的理解
#第三方教程
http://blog.csdn.net/zhoutaohenan/article/details/8641551
#幕课网:创建对象和原型链
http://www.imooc.com/video/6001
var person = function () {};
var p = new person();
很简单的一段代码,我们来看看这个new究竟做了什么?我们可以把new的过程等价于以下三步:
// 创建一个空对象
1、var p = {};
// 可以通过运行 alert( p.__proto__ === person.prototype ) 来验证。结果返回true
2、p.__proto__ = person.prototype;
// 通过这一步,p可以调用person中的属性或函数
3、person.call(p);
当我们调用p.【属性/方法】 的时候,首先p中没有这个【属性/方法】,如果没有就会去__proto__中去找,也就是Person.prototype
而这个 Person.prototype 称为 __proto__ 的原型
Person.prototype事实上还有一个原型:Object.prototype,这个原型的作用是什么呢?
我们注意到任何一个对象都具有.toString()等方法,这其实就是来源于这个原型。
而 Object.prototype 又指向了最终一个原型,就是NULL。
这个过程就是原型链

3、js面向对象:实例方法和静态方法
什么是实例方法?简单的来说就是必须实例化类对象才可以调用的方法,如:
var people= function () {};
people.prototype = {
init:function(){
alert("init")
},
show:function(){
alert("show")
}
}
//VM1008:1 Uncaught TypeError: people.init is not a function(…)
people.init()
var p = new people();
p.init();
什么是静态方法?不需要实例化类就可以直接调用,如:
var people = function(){};
people.test = function(){
alert("123");
}
people.test();
4、js的封装闭包
(function(){
// declare private variables and/or functions
return {
// declare private variables and/or functions
}
})()
5、js的设计模式
待整理...
js - 关于this、new、原型的更多相关文章
- TouchPoint.js – 可视化展示 HTML 原型点击效果
TouchPoint.js 是一个用于 HTML 原型展示的 JavaScript 库(作为UX过程的一部分),通过视觉表现用户在屏幕上的点击.TouchPoint 是高度可定制,非常适合屏幕录制,用 ...
- jquery实现点击展开列表同时隐藏其他列表 js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象
这篇文章主要介绍了jquery实现点击展开列表同时隐藏其他列表的方法,涉及jquery鼠标事件及节点的遍历与属性操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了jquery实现点击 ...
- JS对象中的原型
对象的原型:每个对象都连接一个原型对象,并且它可以从中继承属性.所有通过对象字面量创建的对象都连接到object.prototype.当你创建一个新对象时,你可以选择某个对象作为它的原型.原型连接在更 ...
- js经典试题之原型与继承
js经典试题之原型与继承 1:以下代码中hasOwnProperty的作用是? var obj={} …….. obj.hasOwnProperty("val") 答案:判断obj ...
- 前端总结·基础篇·JS(一)原型、原型链、构造函数和字符串(String)
前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...
- JS基础——构造函数VS原型
JS是一种基于对象的语言.在使用过程中不免遇到复制对象的问题.但通常我们採用的直接赋值'obj1=obj2'这样的做法会出现数据覆盖问题. 也就是对象引用过程中引用地址一致.导致对象数据被改动的问题. ...
- JS 面向对象、prototype原型的克隆
JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...
- JS创建对象、继承原型、ES6中class继承
面向对象编程:java中对象的两个基本概念:1.类:类是对象的模板,比如说Leader 这个是泛称领导,并不特指谁.2:实例:实例是根据类创建的对象,根据类Leader可以创建出很多实例:liyi,y ...
- 《JS高程》对象&原型学习笔记
ECMA-262 把对象定义为:”无序属性的集合,其属性可以包含基本值.对象或者函数.”可以把 ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 6.1.理解 ...
- 深入JS第一天:原型和它的小伙伴们(一)
我在这里不说定义,找点问题,再解决问题. 一.原型 Q1:这样做输出的结果是什么? jQuery= String; jQuery.prototype.say = function () { alert ...
随机推荐
- Codeforces Beta Round #1 C. Ancient Berland Circus 计算几何
C. Ancient Berland Circus 题目连接: http://www.codeforces.com/contest/1/problem/C Description Nowadays a ...
- Codeforces Round #341 (Div. 2) D. Rat Kwesh and Cheese 数学
D. Rat Kwesh and Cheese 题目连接: http://www.codeforces.com/contest/621/problem/D Description Wet Shark ...
- 为Go语言GC正名-20秒到100微妙的演变史
http://blog.csdn.net/erlib/article/details/51850912 https://blog.twitch.tv/gos-march-to-low-latency- ...
- Objective-C字面量语法总结
通常情况下,创建数组,字典的时候需要写一些很长的方法名,今天就总结一下如何使用字面量语法代替这些方法. 1.数值的创建 NSNumber *number1 = [NSNumber numberWith ...
- 【maven】pom.xml文件没错,但是项目有小红叉,Problems中可以看到错误:“Dynamic Web Module 3.0 requires Java 1.6 or newer.”
解决方法: 1.将 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>m ...
- Sqlserver数据库还原.bak文件失败的两个问题
一.SQL Server数据库备份还原后,在数据库名称后会出现“受限制访问”字样 解决方案:将数据库限制访问改为:SINGLE_USER 数据库-->属性-->选项-->状 ...
- Xcode8从相册选图片
使用Xcode8写自己的东西有一段时间了,在使用Xcode8编程时不得不说我特别喜欢改后的默认字体,哈哈,当然默认字体是可以调回去的,只不过默认的字体感觉看起来比以前舒服了,毕竟不会像之前那么”字正腔 ...
- opencv Mat 像素操作
1 cv::Mat cv::Mat是一个n维矩阵类,声明在<opencv2/core/core.hpp>中. class CV_EXPORTS Mat { public: //a lo ...
- python对于0x01的处理
对于python脚本,可以使用: .replace('\x01', '') 对于vim工具,可以使用: :%s/\%x01/ /g
- 流畅的python第十九章元编程学习记录
在 Python 中,数据的属性和处理数据的方法统称属性(attribute).其实,方法只是可调用的属性.除了这二者之外,我们还可以创建特性(property),在不改变类接口的前提下,使用存取方法 ...