关于Js OOP编程 创建对象的一些理解。
面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
对象的含义
对象可以是汽车,人,动物,文字,表单或者任何存在的事物等等。
对象有:
属性-------对象的某些特定的性质。
方法-------对象能做的事情。
事件-------能响应发生在对象上的事情。
我们可以通过创建一个人的对象来理解面向对象
人:
两只手,两只脚,一个头,还可以跑动。
手,脚,头,是人的属性,跑动是人的方法。
首先,我们来用最简单的方法创建一个对象
var person = {
head: "one",
hand: "two",
foot: "two",
run : function(){
console.log("running");
}
}
这个方法一点都不实用,因为它是创建一个单独的对象,,而这个对象和任何常见的数据结构没有任何联系。
然后,我们用构造函数的方式创建一个对象
var Person = function(){//注意,首字母大写
this.head = "one",
this.hand = "two",
this.foot = "two",
this.run = function(){
alert("running");
}
}
var Joan = new Person();
document.write(Joan.run())// "running"
这是用构造函数创建的对象,然后我们再加上一行代码看看
var Niki = new Person();
alert(Joan==Niki) //false;
是的,现在创建了是两个不同的对象实例。
在JavaScript中的每个函数都有一个prototype的属性.如果某个函数被用作构造函数,则这个属性会被自动通过new调用创建对象的原型
console.log(Joan)
可以看到有一个__proto__:Person,其中__proto__是Joan的原型链.它是指向Person的原型.
JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__的内置属性,用于指向创建它的函数对象的原型对象prototype。
关于原型链的一些理解,在JavaScript高级程序设计 一书中写的非常详细。有兴趣的可以去看看,网上也有pdf的文档可以找到。不过建议还是买本书,支持原版嘛。
然后对prototype这个原型属性的任何更改能够应用于用new Person()构造的每一个实例对象,不管它是在更改之前还是更改后创建.为Person.prototype 添加新函数.具体如下:
var Person = function(){//注意,首字母大写
this.head = "one",
this.hand = "two",
this.foot = "two"
}
Person.prototype.run = function(){
alert("running");
}
var Joan = new Person();
Joan.run()// "running"
alert(Joan.__proto__===Person.prototype)//'true'
可以看到,在原型中创建方法是可以调用的,同时Joan的原型链是指向Person的原型的。
再看:
var Niki = new Person();//"runing"
Person.prototype.run = function(){
alert("running running")
}
Joan.run()//"running running"
Niki.run()//"running running"
看,修改Person的原型方法,所有被new Person()创建的对象实例中的方法都被修改了,因为所有实例中共用的是同一个原型方法run。这就是原型的一种应用。
这就是关于创建对象的一些理解。
写了好久。也不知道有没有错误。 如果有错误,欢迎各位大大指点。
下次再写面向对象继承方面的东西。
关于Js OOP编程 创建对象的一些理解。的更多相关文章
- js面向对象编程——创建对象
JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象. 当我们用obj.xxx访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找 ...
- JS OOP编程
//父类 function BaseFun() { var hello = "HelloWorld"; this.HelloPublic = "Hello--World& ...
- js原生设计模式——4安全的工厂方法模式之oop编程增强版
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 简单粗暴地理解js原型链–js面向对象编程
简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- JS面向对象编程(进阶理解)
JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...
- 初步理解require.js模块化编程
初步理解require.js模块化编程 一.Javascript模块化编程 目前,通行的Javascript模块规范共有两种:CommonJS和AMD. 1.commonjs 2009年,美国程序员R ...
- 深入理解node.js异步编程:基础篇
###[本文是基础内容,大神请绕道,才疏学浅,难免纰漏,请各位轻喷] ##1. 概述 目前开源社区最火热的技术当属Node.js莫属了,作为使用Javascript为主要开发语言的服务器端编程技术和平 ...
- js面向对象、创建对象的工厂模式、构造函数模式、原型链模式
JS面向对象编程(转载) 什么是面向对象编程(OOP)?用对象的思想去写代码,就是面向对象编程. 面向对象编程的特点 抽象:抓住核心问题 封装:只能通过对象来访问方法 继承:从已有对象上继承出新的对象 ...
随机推荐
- BlogEngine2.9模仿yahoo滚动新闻Widget
widget.ascx <%@ Control Language="C#" AutoEventWireup="true" CodeFile="w ...
- QT QML目录导航列表视图
[功能] /目录.文件 /文件过滤 /递归 /事件 /高亮当前行 /当前选项 /目录切换动画 /限制根目录 [下载]:http://download.csdn.net/detail/surfsky/8 ...
- 去除表单自动填充时,-webkit浏览器默认给文本框加的黄色背景
input:-webkit-autofill { -webkit-box-shadow:inset 0 0 0 100px #2B2B35 inset; -webkit-text-fill-color ...
- ==与equals 的使用比较
1. == 是一个运算符. 2.Equals则是string对象的方法 我们通常是两种类型的比较 1.基本数据类型比较 2.引用对象比较 其中 1.基本数据类型比较 ==和Equals都比较两个值是否 ...
- base64与byte[]之间转换
主要是根据BASE64Encoder 和BASE64Decoder 进行操作实现,具体例子如下: BASE64Encoder encode = new BASE64Encoder(); //将byte ...
- sqlserver2008一直显示正在还原
sqlserver2008一直显示正在还原.如果不需要还原,则使用: restore database test with recovery如果只需要还原,则使用: restore databas ...
- oracle 删除用户时的坑
ORACLE在使用 SELECT SID,SERIAL# FROM V$SESSION WHERE USERNAME='dt_zntg_trade' 删除会话时,一定要注意dt_zntg_trade的 ...
- asp.net type=file在上传图片到服务器
前台 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> ...
- ViewPager +Fragment 滑动游标
一.我的博客https://github.com/anan03/ananwork/tree/master/anan1.加入compile 'com.gxz.pagerslidingtabstrip:l ...
- 28-React state提升、组件组合或继承
Lifting State Up state提升 对于在React应用程序中更改的任何数据,应该有一个单一的数据源.通常,都是将state添加到需要渲染的组件.如果其他组件也需要它,您可以将其提升到最 ...