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基础拾遗(七)的更多相关文章

  1. JavaScript 基础第七天(DOM的开始)

    一.引言 JavaScript的内容分为三个部分,这三个部分分别是ECMAScript.DOM.BOM三个部分组成.所谓ECMAScript就是JavaScript和核心基础语法,DOM是文档对象模型 ...

  2. JavaScript基础--超级玛丽(七)(上下左右控制)

    相信大家都玩过超级玛丽,下面实现控制玛丽的上.下.左.右等基本功能,本篇只是在练习JavaScript的用法 1.创建一个HTML页面 <!doctype html> <html l ...

  3. JavaScript基础学习(七)—BOM

         BOM(Browser Object Model): 浏览器对象模型.提供了独立于内容而与浏览器窗口交互的对象,BOM主要用于管理窗口和窗口之间的通讯. 一.Navigator对象      ...

  4. javascript基础拾遗(十三)

    1.jQuery的特点 jQuery是目前非常流行的javascript库,理念是"Write Less,Do More" 1)消除浏览器差异 2)简洁的操作DOM方法 3)轻松实 ...

  5. javascript基础拾遗(十二)

    1.javascript的单线程特性 在javascript中,所有的代码都是单线程的 因此所有的网络操作,浏览器事件,都必须是异步执行的,异步执行的逻辑是回调. function callback( ...

  6. javascript基础拾遗(十一)

    1.DOM操作 1)查找 //根据id查找 document.getElementById() //根据html标签查找 documnet.getElementByTagName() //根据样式cl ...

  7. javascript基础拾遗(十)

    1.支持ES6标准的浏览器 IE10+ Chrome Safari Firefox 移动端浏览器统一都支持 需要注意的是,不同浏览器对各个特性的支持也不一样 2.window对象 当前浏览器窗口对象 ...

  8. javascript基础拾遗(六)

    1.Date内置对象 获取系统时间 var now = new Date() console.log(now) console.log(now.getDate()) console.log(now.g ...

  9. javascript基础拾遗(五)

    1.什么是箭头函数 ES6引入的一种新的函数,类似匿名函数,x=>xx 箭头左端为函数参数,右端为函数体 相当于 function (x){ retutn xx } 2.箭头函数的特点 更简洁 ...

随机推荐

  1. Makefile 和 CMakeLists.txt

    Makefile Makefile 的格式 target: prerequisites [tab]command 例子 #Makefile all:chap1 chap2 chap1: - - - : ...

  2. Windows开发之VC++仿QQ迷你首页(迷你资讯)

    技术:VC++,MFC,WTL,,C++,Windows   概述 之前由于需求和兴趣,需要实现类似QQ迷你资讯首页的东西,看起来很酷,于是就写了个实现方案,主要还是基于WIndows C++ 和MF ...

  3. &lt;十一&gt;读&lt;&lt;大话设计模式&gt;&gt;之抽象工厂模式

    学习设计模式有一段时间了,对设计模式有一个体会,就是没那么难.就是设计程序遵循一些原则,让代码可复用,在改动的时候不用涉及太多的类,扩展方便.抽象工厂模式名字听起来抽象.但理解起来一点也不抽象,用语言 ...

  4. DOM,浏览器,javascript,html之间的关系

    来源于:https://github.com/hucheng91/myBlog/blob/master/web/dom/dom.md DOM定义 DOM可以以一种独立于平台和语言的方式访问和修改一个文 ...

  5. shell脚本逐个杀死k8s中某个应用的pod

    #!/bin/bash pod01=`kubectl get pod -o wide -n weifeng-system|grep official-ui-node-prod|awk -F : 'NR ...

  6. std::string std::wstring 删除最后元素 得到最后元素

    std::string str = "abcdefg,"; std::cout << "last character:"<<str.ba ...

  7. 树莓派进阶之路 (030) -Picustom.h(原创)

    写代码的时候敢接每次查wiringPi库函数挺麻烦的,自己wiringPi库封装了一下: #ifndef __PICUSTOM_H__ #define __PICUSTOM_H__ /******** ...

  8. Ubuntu中安装配置和卸载FTP(转)

    转载:http://zyjustin9.iteye.com/blog/2178943 一.安装1.用apt-get工具安装vsftpd: $ sudo apt-get install vsftpd 2 ...

  9. React(0.13) 定义一个动态的组件(属性)

    <!DOCTYPE html> <html> <head> <title>React JS</title> <script src=& ...

  10. JAVA RSA私钥 加密(签名) 对应 C# RSA私钥 加密(签名)

    非对称密钥RSA算法加解密在C#和Java之间交互的问题,这两天看了很多其他人写的文章,碰到了几个问题,最终解决问题. 参考地址:http://xw-z1985.iteye.com/blog/1837 ...