【09-23】js原型继承学习笔记
js原型继承学习笔记
function funcA(){
this.a="prototype a";
}
var b=new funcA();
b.a="object a";
//原型中是否有key对应的属性
function hasPrototypeProperty(obj,key){
return !obj.hasOwnProperty(key) && key in obj;
}
原型对象 构造函数
每一个对象的实例都有一个原型属性,该属性指向了构造函数的原型对象。同时一个函数也有一个原型属性,该属性指向该函数的原型对象,
原型对象包含了一个指向构造函数的指针,和定义在该原型上的其他属性
实例的属性可能会覆盖原型的属性,此时可以通过
delete b.a
删除该实例的属性,此时再次调用b.a
则指向的是函数原型的a
属性。
实例有一个从Object
继承的hasOwnProperty()
方法,该方法只会在实例中检索属性,而不会在原型对象中查找,b.hasOwnProperty(a)
Object
有一个Object.getPrototypeOf(instance)
方法,可以获取实例的原型对象。Object.getPrototypeOf(b)==funA.prototype
函数表达式
//使用函数表达式,避免递归调用时函数名改变
var f=(function f(num){
if(num==1){
return 1;
}else{
return num*f(num-1);
}
});
//jquery1.x源码
(function( window, undefined ) {
//用一个函数域包起来,就是所谓的沙箱
//在这里边var定义的变量,属于这个函数域内的局部变量,避免污染全局
//把当前沙箱需要的外部变量通过函数参数引入进来
//只要保证参数对内提供的接口的一致性,你还可以随意替换传进来的这个参数
"use strict";
window.jQuery = window.$ = jQuery;
})(window);
闭包
function createFunctions(){
var result=[];
for(var i=0;i<10;++i){
result[i]=function(){
return i;
}
}
return result;
}
//输出全为10,返回的函数共享同一个闭包作用域中的实例变量i
createFunctions().forEach(function(f){console.log(f())});//10
//新的实现
function createFunctionsNew(){
var result=[];
for(var i=1;i<=10;++i){
result[i]=function(num){
return function(){
return num;
}
}(i);//按值传递参数
}
return result;
}
//返回符合逻辑的结果
createFunctionsNew().forEach(function(f){console.log(f())});//10
闭包中的this
var name="name of window";
var object={
name:"name of object",
getName:function inner(){
return function(){
return this.name;//此时访问的是inner的this作用域,找不到是访问global中的name
};
}
};
console.log(object.getName()());//"name of window";
//new
var object={
name:"name of object",
getName:function inner(){
var innerThis=this;
return function(){
return innerThis.name;//缓存外部函数的作用域
};
}
};
console.log(object.getName()());//"name of object";
js没有块级作用域
function get(count){
for(var i=0;i<count;i++){
console.log(i);
}
console.log(i);
}
get(2);//0 1 2,跟c、Java等不一样
js的特点
/*
* 没有块级作用域
* 函数可以作为返回值
* 变量可以重复声明和定义
* 闭包
* 原型继承
*/
【09-23】js原型继承学习笔记的更多相关文章
- 【转载】Javascript原型继承-学习笔记
阮一峰这篇文章写的很好 http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javas ...
- Underscore.js 源码学习笔记(上)
版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}()); 这样的东西,我们应该知道这是一个 IIFE(立即执行 ...
- Underscore.js 源码学习笔记(下)
上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...
- JS原型继承与类的继承
我们先看JS类的继承 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- js原型继承四步曲及原型继承图
一:js原型继承四步曲 //js模拟类的创建以及继承 //动物(Animal),有头这个属性,eat方法 //名字这个属性 //猫有名字属性,继承Animal,抓老鼠方法 //第一步:创建父类 fun ...
- 浏览器中js执行机制学习笔记
浏览器中js执行机制学习笔记 RiverSouthMan关注 0.0772019.05.15 20:56:37字数 872阅读 291 同步任务 当一个脚本第一次执行的时候,js引擎会解析这段代码,并 ...
- 纯JS实现KeyboardNav(学习笔记)一
纯JS实现KeyboardNav(学习笔记)一 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 GitHub项目源码 预览地址 最终效果 KeyboardNav使用指南 ...
- 纯JS实现KeyboardNav(学习笔记)二
纯JS实现KeyboardNav(学习笔记)二 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 这篇主要是添加css,优化js编写逻辑和代码排版 GitHub项目源码 ...
- JavaScript 类型、原型与继承学习笔记
目录 一.概览 二.数据类型 1. JavaScript中的数据类型 2. 什么是基本类型(Primitive Data Type) 2.1 概念 2.2 七个基本类型 2.3 基本类型封装对象 3. ...
随机推荐
- WPF 自定义雷达图
自定义雷达图表如下: Git下载地址:https://github.com/Kybs0/RadarChartControl 1.创建UserControl,名为“RadarChartControl” ...
- 自定义shiro的Realm实现和CredentialsMatcher实现以及Token实现
Realm是shiro比较核心的接口,简单说它的实现类就是校验用户输入的账号信息的地方.如果想自定义实现一般的配置文件如下: <!--自定义Realm 继承自AuthorizingRealm - ...
- MIDI信息为什么不能通过FL Studio输出
讲解这个问题之前,小编先给大家科普一下什么是MIDI.所谓的MIDI其实只是数字信号,和我们熟知的乐谱有点像.它的作用就是能很好的传达什么时间演奏什么音,这个音要演奏多久等信息,就如同我们演唱会中指挥 ...
- NYOJ 205
大数取模算法: 这个又不同于幂取模算法,对于几百万位的数字取模,直接的方法是行不通的.最好利用数论的知识 (a*b)%c = ((a%c)*b)%c ;利用这个公式我们只要从n的一次方开始不断计算,乘 ...
- Mysql操作初级
Mysql操作初级 本节内容 数据库概述 数据库安装 数据库操作 数据表操作 表内容操作 1.数据库概述 数据库管理系统叫做DBMS 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建 ...
- WPF Popup 控件导致被遮挡内容不刷新的原因
WPF Popup 控件导致被遮挡内容不刷新的原因 周银辉 今天在写一个WPF控件时用到了Popup控件,很郁闷的情况是:当popup关闭时,原来被popup挡住的界面部分不刷新,非要手动刷新一下(比 ...
- linux-windows资源共享
先安装samba,然后 sudo mount -t cifs //192.168.1.111/Jack_Win_Share /media/ -o username=Jack,password=1,io ...
- Stack Overflow: The Architecture - 2016 Edition
To get an idea of what all of this stuff “does,” let me start off with an update on the average day ...
- OrchardNoCMS vNext如何在VS2015下调试
由于VS2015还没有出来正式版,ASP.NET 5也是没有出来正式版.所以在你下载了OrchardNoCMS vNext的代码后,需要配置一些东西,才能启动项目,开始调试. 需要注意以下几点: 1. ...
- 基于jquery的bootstrap在线文本编辑器插件Summernote
Summernote是一个基于jquery的bootstrap超级简单WYSIWYG在线编辑器.Summernote非常的轻量级,大小只有30KB,支持Safari,Chrome,Firefox.Op ...