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.箭头函数的特点 更简洁 ...
随机推荐
- Linux 中的网络数据包捕获
Linux 中的网络数据包捕获 Ashish Chaurasia, 工程师 简介: 本教程介绍了捕获和操纵数据包的不同机制.安全应用程序,如 VPN.防火墙和嗅探器,以及网络应用程序,如路由程序,都依 ...
- 大家所说的full-stack框架到底是指什么?
轻量级框架: 整合层 guice ORM层 nutz, guzz 表示层 -- None -- JSF Spring MVC ...
- sqlite元数据
sqlite数据库每个文件都是一个database,因此同一个文件内部不再划分database.sqlite没有提供像mysql那样的show tables;和desc 表名类似的语句.许多数据库的元 ...
- python配置文件转dict
配置文件有很多种,如JSON,properties,conf,xml等. 除非需要跟别的语言进行交互,python本身是完全可以取代所有配置文件的.使用python进行配置可以使用非常灵活地执行一些逻 ...
- django日志使用TimeRotateFileHandler
如果使用django的settings.py设置日志会产生一些问题. 问题描述 报错信息如下: Traceback (most recent call last): File "C:\Pyt ...
- 关于JAVA路径 问题
1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://w ...
- linux RPM包安装、更新、删除等操作命令简明总结, 如何查看yum安装的软件路径 ?
rpm -ivh package.rpm 安装一个rpm包rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告rpm -U package.rpm 更新一个 ...
- php自动获取字符串编码函数mb_detect_encoding(转)
使用 mb_detect_encoding() 函数来判断字符串是什么编码的. 当在php中使用mb_detect_encoding函数进行编码识别时,很多人都碰到过识别编码有误的问题,例如对与GB2 ...
- 【HTML】HTML之marquee详解
该标签不是HTML3.2的一部分,并且只支持MSIE3以后内核,所以如果你使用非IE内核浏览器(如:Netscape)可能无法看到下面一些很有意思的效果该标签是个容器标签语法: <marquee ...
- MySQL的timestamp类型自动更新问题
今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新.岂知对这个类型的值还不甚了解,导致出错.发现这个字段只是在这行数据建立的时候有值,在更新的却无变化 ...