javascript基础拾遗(七)
1.对象的继承__proto__
var Language = {
name: 'program',
score: 8.0,
popular: function () {
return this.score/10*100 + '%';
}
}
var Python = {
name: 'python',
score: 9.0
}
Python.__proto__ = Language
console.log(Python.popular())
运行结果: 90%
__proto__属性将Python对象的原型指向Language对象,这样Python对象就像是从Language对象继承的一样。
2.对象继承的另一种方法Object.create()
var Language = {
name: 'program',
score: 8.0,
popular: function () {
return this.score/10*100 + '%';
}
}
Python = Object.create(Language)
Python.name = 'python'
Python.score = 9.0
console.log(Python.popular())
运行结果: 90%
3.原型链
当访问一个对象的属性时,javascript引擎先在当前对象上查找该属性,如果没有,就到它的原型对象上找,
如果还没有找到,就一直上溯到Object.prototype对象。
例如,创建Array对象:
var arr = [1,2,3];
其原型链是:
arr--->Array.prototype---->Object.prototype
Array.prototype定义了indexof(),shift()等方法,因此可以直接在Array对象上调用这些函数。
函数也是一个对象,它的原型链是:
foo--->Function.prototype---->Object.prototype---->null
Function.prototype定义了apply()等方法,因此所有函数都可以调用apply方法
4.构造函数
function Language(name){
this.name = name
this.score = 8.0
}
var language = new Language('python')
console.log(language)
Language是个普通的函数,new关键字调用Language函数,并返回Language对象,默认return this,省略
Language函数this关键字也绑定到new创建的对象
原型链如下:
language--->Language.prototype---->Object.prototype--->null
language有一个属性constructor,继承自Language,指向的是Language对象本身
language.constructor == Language.prototype.constructor
Language.prototype.constructor == Lang
Object.getPrototypeOf(lang) == Lang.prototype
language instanceOf Language
function Language(name){
this.name = name
this.score = 8.0
this.popular = function(){
return this.score/10*100 + '%'
}
}
var language = new Language('python')
var language2 = new Language('C')
console.log(language)
// false
console.log(language.popular == language2.popular)
language和language2的popular方法不是同一个函数,根据属性查找原则,
只需要将popular方法,添加到Language的原型上就可以了
function Language(name){
this.name = name
this.score = 8.0
}
Language.prototype.popular = function () {
return this.score/10*100 + '%'
}
var language = new Language('python')
var language2 = new Language('C')
console.log(language)
// true
console.log(language.popular == language2.popular)
需要注意的,构造函数首字母应该大写,普通函数首字母小写
javascript基础拾遗(七)的更多相关文章
- JavaScript 基础第七天(DOM的开始)
一.引言 JavaScript的内容分为三个部分,这三个部分分别是ECMAScript.DOM.BOM三个部分组成.所谓ECMAScript就是JavaScript和核心基础语法,DOM是文档对象模型 ...
- JavaScript基础--超级玛丽(七)(上下左右控制)
相信大家都玩过超级玛丽,下面实现控制玛丽的上.下.左.右等基本功能,本篇只是在练习JavaScript的用法 1.创建一个HTML页面 <!doctype html> <html l ...
- JavaScript基础学习(七)—BOM
BOM(Browser Object Model): 浏览器对象模型.提供了独立于内容而与浏览器窗口交互的对象,BOM主要用于管理窗口和窗口之间的通讯. 一.Navigator对象 ...
- javascript基础拾遗(十三)
1.jQuery的特点 jQuery是目前非常流行的javascript库,理念是"Write Less,Do More" 1)消除浏览器差异 2)简洁的操作DOM方法 3)轻松实 ...
- javascript基础拾遗(十二)
1.javascript的单线程特性 在javascript中,所有的代码都是单线程的 因此所有的网络操作,浏览器事件,都必须是异步执行的,异步执行的逻辑是回调. function callback( ...
- javascript基础拾遗(十一)
1.DOM操作 1)查找 //根据id查找 document.getElementById() //根据html标签查找 documnet.getElementByTagName() //根据样式cl ...
- javascript基础拾遗(十)
1.支持ES6标准的浏览器 IE10+ Chrome Safari Firefox 移动端浏览器统一都支持 需要注意的是,不同浏览器对各个特性的支持也不一样 2.window对象 当前浏览器窗口对象 ...
- javascript基础拾遗(六)
1.Date内置对象 获取系统时间 var now = new Date() console.log(now) console.log(now.getDate()) console.log(now.g ...
- javascript基础拾遗(五)
1.什么是箭头函数 ES6引入的一种新的函数,类似匿名函数,x=>xx 箭头左端为函数参数,右端为函数体 相当于 function (x){ retutn xx } 2.箭头函数的特点 更简洁 ...
随机推荐
- 【phpstudy】安装Oracle 客户端 并连接
参考连接:https://blog.csdn.net/liuquan007/article/details/77508518 phpstudy2016是32位版 phpstudy2014是64位版本[ ...
- IDEA安装使用 VisualVM 及VisualVM 远程监视
1. VisualVM是什么 按照VisualVM官网(http://visualvm.github.io/)上的介绍,VisualVM是一个集成命令行JDK工具和轻量级分析功能的可视化工具.专为开发 ...
- uitableview分组的数据2中方式
// // ViewController.m // tableviegroup // // Created by ganchaobo on 13-7-2. // Copyright (c) 2013年 ...
- LLVM和clang
LLVM编译器架构 LLVM项目是一套工具的集合,它包括模块化.可复用的编译器及一些列工具链技术. LLVM最开始是Low Level Virtual Machine的简称,但现在它并不是传统意义上的 ...
- 神秘的40毫秒延迟与 TCP_NODELAY
写 HTTP Server,不可免俗地一定要用 ab 跑一下性能,结果一跑不打紧,出现了一个困扰了我好几天的问题:神秘的 40ms 延迟. Table of Contents 1 现象 2 背后的原因 ...
- 【Redis】Redis的常规操作命令
NoSQL是一种非关系型数据库,非关系型数据库库和传统的关系型数据库不同,非关系性体现在不需要依赖表进行数据存储.常见的非关系型数据库有Redis.MonoDB.HBase等,这些是基于key-val ...
- Web压力架构
原文地址:https://www.cnblogs.com/lori/archive/2015/03/27/4370827.html Web压力架构... 1 一 系统性能测试概述... 1 1.1 性 ...
- ASP.NET MVC同时支持web与webapi模式
原文地址:https://blog.csdn.net/laymat/article/details/65444701 我们在创建 web mvc项目时是不支持web api的接口方式访问的,所以我们需 ...
- 搭建自己的 github.io 博客
1.前言 github.io 是基于 Github 的 repo 管理,这意味着咱们对其是有绝对的控制,这个跟放在第三方的平台比,可控性要好太多. 使用 github pages 服务搭建博客的好处有 ...
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...