Js的 "继承"
Js 和 Java , C等语言不是很一样 . 其他语言有 类和实例 但是Js就比较特殊 , 所以 类和实例 只能说是大多数面向对象编程的语言的基本概念 .
Js比较特殊 , 它不去分类和实例的概念 . 而是通过原型(prototype)来实现面向对象编程 .
下面介绍Js中第一种用于继承的方法
var robot = {
name: 'Robot',
height: 1.6,
run: function () {
console.log(this.name + ' is running...');
}
};
这一段代码 , 声明了一个对象robot . 这个对象有姓名 , 身高(属性) , 还有自己的行为(方法) . 如果我们能根据这一个对象来建立另一个对象该是多么美好的事情呀 .
有需求就有产出 . 所以请看下面的代码 . 我们可以根据已经有的 "实例" 来声明一个新的 "实例" .
var Student = {
name: 'Robot',
height: 1.2,
run: function () {
console.log(this.name + ' is running...');
}
};
var xiaoming = {
name: '小明'
};
xiaoming.__proto__ = Student;
可以看出 , 我们先写了一个Student的实例 , 然后谢了一个xiaoming的实例 . 最后我们讲小明的原型 (prototype) 指向了 Student . xiaoming有自己的name属性 , 但是没有run方法 , 然后从Student中继承下来 , 得到了 Student的run方法.
这个方法不建议使用 . 因为低版本的IE不支持 . 下面我们说一个真正用的继承 .
除了直接用 {...} 来创建一个对象之外 . Js 还有一种利用构造方法 , 来创建对象的方法 . 首先我们定义一个构造函数 .
function Student(name) {
this.name = name;
this.hello = function () {
alert('Hello, ' + this.name + '!');
}
}
... 这个是不是有点像普通的函数 ? 但是普通函数是不能直接写this的会报错 . 我们可以通过一个关键词 new 来调用这个函数将函数转变为 构造函数 , 然后去声明一个对象. .
var xiaoming = new Student('小明');
xiaoming.name; // '小明'
xiaoming.hello(); // Hello, 小明!
如果我们不写new 的话 this是指向undefined的 . 然后xiaoming.name也只会返回一个undefined . 但是如果我们写了new 这个普通的函数就会变成一个构造函数 . 然后在函数的末尾自动加上一个 . return this;
构造函数千万不要忘记写new 此外为了区分普通函数和构造函数 , 我们按照约定构造函数的首字母应该大写 . 在某些语法检查工具当中这样的好习惯会在你忘了写new的时候检测到并且提醒你写错了 .
在传统的面向对象语言如 C++ Java继承的本质是扩展一个现有的Class 生成一个Subclass . 由于这些语言严格区分类和实例 , 所以继承实际上是对类型的扩展 , 但是Js中由于采用原型继承,我们无法直接扩展一个类 , 因为根本就不存在Class这种类型(听起来Js还听骄傲?)
http://blog.csdn.net/hy1405430407/article/details/48626771
Js的 "继承"的更多相关文章
- JS对象继承篇
JS对象继承篇 ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 原型链 其基本思路是利用原型让一个引用类型继承另一个引用类型的属性和方法 function Person() ...
- js实现继承的5种方式 (笔记)
js实现继承的5种方式 以下 均为 ES5 的写法: js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承 ...
- js实现继承的方式总结
js实现继承的5种方式 以下 均为 ES5 的写法: js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承 ...
- 【09-23】js原型继承学习笔记
js原型继承学习笔记 function funcA(){ this.a="prototype a"; } var b=new funcA(); b.a="object a ...
- js实现继承的两种方式
这是面试时面试官会经常问到问题: js的继承方式大致可分为两种:对象冒充和原型方式: 一.先说对象冒充,又可分为3种:临时属性方式.call().apply(): 1.临时属性方式: 当构造对象son ...
- js实现继承
js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...
- 浅谈JS的继承
JS继承 继承是OO语言中最为人津津乐道的概念,许多OO语言都支持两种方式的继承:接口继承:实现继承. 接口继承:只继承方法签名. 实现继承:继承实际的方法. 由于ES里函数没有签名,所以在ES里面无 ...
- JS类继承常用方式发展史
JS类继承常用方式发展史 涉及知识点 构造函数方式继承 1-继承单个对象 1.1 多步走初始版 1.2 多步走优化版 1.3 Object.create()方式 2-继承多个对象 2.1 遍历 Obj ...
- js实现继承的5种方式
js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...
- JS原型继承与类的继承
我们先看JS类的继承 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
随机推荐
- 企业用户选择Java多于.NET的 5个原因
.NET 和 Java 是当今社会最受欢迎的两种编程语言, 长期的发展和强大的功能使他们足以在编程界立足. 十余年的争论也没得到结果的一个话题就是——他们哪个更好一些? 今天, 我们不再去讨论JAVA ...
- [backbone] Getting Started with Backbone.js
一.简介 Backbone 是一个 JavaScript MVC 框架,它属于轻量级框架,且易于学习掌握.模型.视图.集合和路由器从不同的层面划分了应用程序,并负责处理几种特定事件.处理 Ajax 应 ...
- ubuntu安装SCrapy
依次安装 sudo apt-get install build-essential; sudo apt-get install python-dev; sudo apt-get install lib ...
- postgresql 视图
一.创建视图 create or replace view vw_users as select * from users; 二.通过定义规则来更新视图 create rule vw_users_up ...
- Eclipse上安装GIT插件EGit
一.Eclipse上安装GIT插件EGit Eclipse的版本eclipse-java-helios-SR2-win32.zip(在Eclipse3.3版本找不到对应的 EGit插件,无法安装) E ...
- 安卓手机修改host
电脑修改 注意:usb设置为调试模式 1.手机必须先root,小米可以安卓开发版系统即可 2.安卓 adb工具(android debug bridge) 3.依次执行下面的命令 1.adb root ...
- sed 替换
sed -i 's/i=0/i=2/g' test2.sh -i 在当前文档替换 g 替换所有文档 sed -i '3s/cccc/ccccc/' a.txt 将第三行的 cccc 替换成 ccccc ...
- 如何在Quagga BGP路由器中设置IPv6的BGP对等体和过滤
在本教程中,我们会向你演示如何创建IPv6 BGP对等体并通过BGP通告IPv6前缀.同时我们也将演示如何使用前缀列表和路由映射特性来过滤通告的或者获取到的IPv6前缀. 拓扑 服务供应商A和B希望在 ...
- C# 定时器事件(设置时间间隔,间歇性执行某一函数,控制台程序)
定时器事件代码 static void Main(string[] args) { Method(); #region 定时器事件 Timer aTimer = new Timer(); aTimer ...
- 各种常用函数 (SQL)
数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001 ...