js的面向对象开发能力较弱,基本是以prototype为核心的面向对象,虽然现在出了个class这玩意,但本文还是先不做探讨。

面向对象基础——构造函数方法

var Fly = function (speed) {
this.power = "i can fly";
this.speed = speed+"km/h";
this.init = function(){
console.log(" i will fly and my speed is "+this.speed);
}
}
var plane = new Fly(1000)
plane.init()

至此我们便构建出了一个简单的对象plane是一个 new Fly();

那么我们想要拓展怎么办

面向对象实现的基础——prototype

Fly.prototype.sayPower = function(){
console.log(this.power)
}

由此我们便给他添加了一个新的方法叫做sayPower();同样可以在plane中调用。

一个一个的添加非常麻烦,要添加好多那么应该怎么办

Fly.prototype = {
type:"波音747",
saySpeed:function(){
console.log(this.speed)
},
sayType:function(){
console.log(this.type)
}
}

我们调用了一个对象指向了他的prototype,但是这是我们执行plane.sayPower()会发现这个方法是没有的,因为他被后来的覆盖了

constuctor指向

上面那种方法还有一个问题就是指向变了,指向就是plane的构造者,plane.constructor变成了Object();

所以我们应该加一行

Fly.prototype = {
constructor:Fly,
type:"波音747",
saySpeed:function(){
console.log(this.speed)
},
sayType:function(){
console.log(this.type)
}
}

JQuery中的链式实现方法

神奇的jQuery实现了链式调用的原理就是在不要求返回特定值时一直返回本身

(function (){
var jQuery = function(selector){
return new Obj(selector)
}//创建一个对象
var Obj = function (selector){
this.init(selector)
}//创建时这个对象初始化一个方法
Obj.prototype = {
length:,
constructor:jQuery,
init:function(selector){
var elem;
elem = document.querySelectorAll(selector);
for(var i=;i<elem.length;i++){
this[i] = elem[i];
}
this.length = elem.length;
return this  //初始化的时候会返回一个本身,然后创建一个hash数组
},
css:function(attr,value){
for(var i=;i<this.length;i++){
this[i].style[attr] = value;
}
return this  //遍历自己的hash,给添加样式
}
}
window.$ = window.jQuery = jQuery
})();
$(".box").css("background","#f93")

还有一种神奇的方法

(function (){
var jQuery = function(selector){
return new jQuery.prototype.init(selector)
}
jQuery.prototype = {
length:,
constructor:jQuery,
init:function(selector){
var elem;
elem = document.querySelectorAll(selector);
for(var i=;i<elem.length;i++){
this[i] = elem[i];
}
this.length = elem.length;
return this
},
css:function(attr,value){
for(var i=;i<this.length;i++){
this[i].style[attr] = value;
}
return this
}
}
jQuery.prototype.init.prototype = jQuery.prototype //在这里都连起来
window.$ = window.jQuery = jQuery
})();
$(".box").css("background","#f93")

js面向对象开发基础的更多相关文章

  1. 新手如何理解JS面向对象开发?

    今天有时间讲讲我对面向对象的理解跟看法,尽量用通俗的语言来表达,多多指教! 如今前端开发已经越来越火了,对于前端开发的要求也是越来越高了,在面试中,经常有面试官会问:你对JS面向对象熟悉吗? 其实,也 ...

  2. 原生js日历选择器,学习js面向对象开发日历插件

    在web开发过程中经常会碰到需要选择日期的功能,一般的操作都是在文本框点击,然后弹出日历选择框,直接选择日期就可以在文本框显示选择的日期.开发好之后给用户使用是很方便,但如果每一个日历选择器都要临时开 ...

  3. 云笔记项目-补充JS面向对象编程基础知识

    简单介绍: 此部分知识为在做云笔记项目中补充,因为云笔记项目中涉及到前端js,里面写了很多js脚本,用到了创建js属性和方法,在js中直接声明的属性和方法最终都会变成window的对象,即其成为了全局 ...

  4. JS OOP -01 面向对象的基础

    JS面向对象的基础: 1.用定义函数的方式定义类 2.用new操作符获得一个类的实例 3.使用 [ ] 引用对象的属性和方法 4.动态添加,修改,删除对象的属性和方法 5.使用 { } 语法创建无类型 ...

  5. JS面向对象使用面向对象进行开发

      面向对象基础一之初体验使用面向对象进行开发 对 JS 中的面向对象的基础进行讲述, 初体验使用面向对象进行开发 主要内容是 面向对象的概念及特性 用面向对象的方式解决简单的标签创建实例 一些基础的 ...

  6. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║Vue基础:JS面向对象&字面量& this字

    缘起 书接上文<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史>,昨天咱们说到了以我的经历说明的web开发经历的 ...

  7. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

  8. JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)

    函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) {             return i1 + i2;//如果不写return返回 ...

  9. JavaScript 面向对象开发知识基础总结

    JavaScript 面向对象开发知识基础总结 最近看了两本书,书中有些内容对自己还是很新的,有些内容是之前自己理解不够深的,所以拿出来总结一下,这两本书的名字如下: JavaScript 面向对象精 ...

随机推荐

  1. centos安装gcc4.8.2

    1. 下载源码:镜像地址http://mirror.bjtu.edu.cn/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.gz用svn下载可以随时更新到最新的版本svn checko ...

  2. HDU--2639 Bone Collector II(01背包)

    题目http://acm.hdu.edu.cn/showproblem.php?pid=2639 分析:这是求第K大的01背包问题,很经典.dp[j][k]为背包里面装j容量时候的第K大的价值. 从普 ...

  3. GitHub for Visual Studio使用讲解

    从VS2015起(应该是吧?),微软已经在VS中集成了GitHub,方便开发者对项目进行版本控制. 扩展包下载地址:https://aka.ms/ghfvs 其实VS2015的安装包中已经自带了这个扩 ...

  4. NoSQL 列族数据库

  5. NFS和mount常用参数详解 本文目录

    NFS和mount常用参数详解   本文目录 NFS权限参数配置 mount挂载参数 原始驱动程序的挂载选项. 新驱动程序的挂载选项. 怎样改变已经挂载的NTFS卷的权限? 怎样自动挂载一个NTFS卷 ...

  6. 安装postgresql11.5

    root身份安装 创建用户 编译安装成功后,接下来要做的就是创建一个普通用户,因为默认超级用户(root)不能启动postgresql,所以需要创建一个普通用户来启动数据库,执行以下命令创建用户: [ ...

  7. 数据库顶会VLDB论文解读:阿里数据库智能参数优化的创新与实践

    前言 一年一度的数据库领域顶级会议VLDB 2019于美国当地时间8月26日-8月30日在洛杉矶召开.在本届大会上,阿里云数据库产品团队多篇论文入选Research Track和Industrial ...

  8. Python实现单神经元分类图片的训练

    1.加载包和数据 numpy is the fundamental package for scientific computing with Python. h5py is a common pac ...

  9. get请求中文乱码

    get请求时要将url进行encodeURI http://www.ruanyifeng.com/blog/2010/02/url_encoding.html http://www.ruanyifen ...

  10. java监控文件夹下的文件变化使用jnotify

    https://blog.csdn.net/codepython/article/details/42341243?utm_source=blogxgwz1 使用jnotify https://blo ...