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.箭头函数的特点 更简洁 ...
随机推荐
- Makefile 和 CMakeLists.txt
Makefile Makefile 的格式 target: prerequisites [tab]command 例子 #Makefile all:chap1 chap2 chap1: - - - : ...
- Windows开发之VC++仿QQ迷你首页(迷你资讯)
技术:VC++,MFC,WTL,,C++,Windows 概述 之前由于需求和兴趣,需要实现类似QQ迷你资讯首页的东西,看起来很酷,于是就写了个实现方案,主要还是基于WIndows C++ 和MF ...
- <十一>读<<大话设计模式>>之抽象工厂模式
学习设计模式有一段时间了,对设计模式有一个体会,就是没那么难.就是设计程序遵循一些原则,让代码可复用,在改动的时候不用涉及太多的类,扩展方便.抽象工厂模式名字听起来抽象.但理解起来一点也不抽象,用语言 ...
- DOM,浏览器,javascript,html之间的关系
来源于:https://github.com/hucheng91/myBlog/blob/master/web/dom/dom.md DOM定义 DOM可以以一种独立于平台和语言的方式访问和修改一个文 ...
- shell脚本逐个杀死k8s中某个应用的pod
#!/bin/bash pod01=`kubectl get pod -o wide -n weifeng-system|grep official-ui-node-prod|awk -F : 'NR ...
- std::string std::wstring 删除最后元素 得到最后元素
std::string str = "abcdefg,"; std::cout << "last character:"<<str.ba ...
- 树莓派进阶之路 (030) -Picustom.h(原创)
写代码的时候敢接每次查wiringPi库函数挺麻烦的,自己wiringPi库封装了一下: #ifndef __PICUSTOM_H__ #define __PICUSTOM_H__ /******** ...
- Ubuntu中安装配置和卸载FTP(转)
转载:http://zyjustin9.iteye.com/blog/2178943 一.安装1.用apt-get工具安装vsftpd: $ sudo apt-get install vsftpd 2 ...
- React(0.13) 定义一个动态的组件(属性)
<!DOCTYPE html> <html> <head> <title>React JS</title> <script src=& ...
- JAVA RSA私钥 加密(签名) 对应 C# RSA私钥 加密(签名)
非对称密钥RSA算法加解密在C#和Java之间交互的问题,这两天看了很多其他人写的文章,碰到了几个问题,最终解决问题. 参考地址:http://xw-z1985.iteye.com/blog/1837 ...