【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. ...
随机推荐
- C#性能优化考虑的几个方向
装箱与拆箱 ArrayList's vs. generic List for primitive types and 64-bits 类型转换 GC 注意SOH对象应该较快,避免内存泄漏 注意LO ...
- OAuth协议——PHP第三方登陆协议
慕课网Badguy老师的良心课程! 总会有那种什么都不想干的时候,但现在的日子又不这么允许个人的放纵,我一般就只有这几个选择:看课程视频,看书,看小说..好像还是有可以做的事情.其中,看课程视频有点无 ...
- spark on yarn 提交任务出错
Application ID is application_1481285758114_422243, trackingURL: http://***:4040Exception in thread ...
- leetcode: longest substring without repeating characters
July 16, 2015 Problem statement: Longest Substring Without Repeating Characters Read the blog: http: ...
- 由于log太多导致ubuntu硬盘空间满了,进入不了系统解决办法
具体现象是在图形界面输入用户名和密码之后,再次提示需要输入用户名和密码. 步骤一:按快捷键进入命令行界面.ctrl+alt+f1. 步骤二:清空文件 clear log cd /var/log sud ...
- 原版ubuntu 系统下,emacs24无法输入中文问题解决方案
在重装了原版ubuntu14后,安装了搜狗输入法,但是意外的发现在emacs下无法使用.在网上查找了一些教程后,解决了该问题.解决方案如下: $sudo mv /usr/bin/emacs24 /us ...
- one to many
@OneToMany(mappedBy="order",fetch=FetchType.EAGER,cascade={CascadeType.ALL}) private Li ...
- 解决ppt中视频不能播放的问题
小伙伴一直在纠结一个问题,有个ppt,在其他人的电脑上可以正常播放其中的视频,但是在某一个电脑上却总是不能播放,一直没找到原因,俺们今早捯饬了一下,貌似找到一丢丢原因和解决办法了. #1,疑似原因 为 ...
- LeetCode:Count and Say
题目链接 The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 11 ...
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...