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原型继承学习笔记的更多相关文章

  1. 【转载】Javascript原型继承-学习笔记

    阮一峰这篇文章写的很好 http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javas ...

  2. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  3. Underscore.js 源码学习笔记(下)

    上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...

  4. JS原型继承与类的继承

    我们先看JS类的继承 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  5. js原型继承四步曲及原型继承图

    一:js原型继承四步曲 //js模拟类的创建以及继承 //动物(Animal),有头这个属性,eat方法 //名字这个属性 //猫有名字属性,继承Animal,抓老鼠方法 //第一步:创建父类 fun ...

  6. 浏览器中js执行机制学习笔记

    浏览器中js执行机制学习笔记 RiverSouthMan关注 0.0772019.05.15 20:56:37字数 872阅读 291 同步任务 当一个脚本第一次执行的时候,js引擎会解析这段代码,并 ...

  7. 纯JS实现KeyboardNav(学习笔记)一

    纯JS实现KeyboardNav(学习笔记)一 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 GitHub项目源码 预览地址 最终效果 KeyboardNav使用指南 ...

  8. 纯JS实现KeyboardNav(学习笔记)二

    纯JS实现KeyboardNav(学习笔记)二 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 这篇主要是添加css,优化js编写逻辑和代码排版 GitHub项目源码 ...

  9. JavaScript 类型、原型与继承学习笔记

    目录 一.概览 二.数据类型 1. JavaScript中的数据类型 2. 什么是基本类型(Primitive Data Type) 2.1 概念 2.2 七个基本类型 2.3 基本类型封装对象 3. ...

随机推荐

  1. 【小白的CFD之旅】14 实例反思

    小白将敲门实例认真做了三遍,终于可以脱离文档直接将实例从头到尾的完成了.不过在做实例的过程中,小白 还是发现了不少的问题. 这些问题包括: 实例是从导入网格文件开始的,这网格是什么鬼? 在Models ...

  2. 关于mysql数据库插入数据,不能插入中文和出现中文乱码问题

    首先,推荐一篇博客:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当时,我安装完mysql数据库后,新建一个数据库后插入数据 ...

  3. WPFTookit Chart 入门

    如何使用WPFToolKit Chart private void button1_Click(object sender, EventArgs e) { var s = new Series(); ...

  4. 计算机网络-IP类型判断

    第一个类别为A类,最后一个类别为E类,前边三个类别(A类.B类和C类)被用来标识工作站.路由器.交换机以及其他设备,而最后两个类别(D类和E类)被保留做特殊用途. 一个IP地址由32个比特位构成,这就 ...

  5. Eclipse调试常用技巧

    1. 条件断点 断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止. 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才 ...

  6. TCP/IP四层模型和OSI七层模型

    TCP/IP四层模型 TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对 ...

  7. python使用you-get模块下载视频

    pip install you-get # 安装先 怎么用    进入命令行: you-get url 暂停下载:ctrl + c ,继续下载重复  you-get url 官网地址:https:// ...

  8. 代码覆盖工具(gcov、lcov)的使用

    一.安装 gcov:是随gcc一起发布的,并不需要独立安装:lcov:其他博客说是随ltp发布的,结果下载下ltp之后编译了10多分钟,最后也没见lcov,最后到sourceforge下载了lcov单 ...

  9. Java里的生产者-消费者模型(Producer and Consumer Pattern in Java)

    生产者-消费者模型是多线程问题里面的经典问题,也是面试的常见问题.有如下几个常见的实现方法: 1. wait()/notify() 2. lock & condition 3. Blockin ...

  10. greenDao:操作数据库的开源框架

    greenDAO: Android ORM for your SQLite database 1. greenDao库获取 英文标题借鉴的是greendrobot官网介绍greenDao时给出的Tit ...