- 浏览: 525345 次
- 性别:
- 来自: 北京
-
博客专栏
-
-
jQuery技术内幕
浏览量:202620
最新评论
-
青春依旧:
学习html5哪里好?当然华清远见是首选!
[原创] jQuery源码分析-01总体架构 -
追梦1819:
[size=x-small][color=red][/colo ...
[原创] jQuery源码分析-04 选择器-Sizzle-设计思路 -
niuqiang2008:
学习学习
[原创] jQuery源码分析-04 选择器-Sizzle-工作原理 -
liuweihug:
jquery 解析正则表达式及常见的Regex规则和表达式 - ...
[原创] jQuery源码分析-02正则表达式-RegExp-常用正则表达式 -
liang8768:
mark!!!
[原创] jQuery源码分析-00前言开光
作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com
毕竟是边读边写,不对的地方请告诉我,多多交流共同进步。本章还未写完,完了会提交PDF。
前记:
想系统的好好写写,但是会先从感兴趣的部分开始。
近期有读者把PDF传到了百度文库上,首先感谢转载和传播,但是据为已有并设置了挺高的财富值才能下载就不好了,以后我整理好了会传到文库上。请体谅一下。
3. 构造jQuery对象
3.1 源码结构
先看看总体结构,再做分解:
(function( window, undefined ) {
var jQuery = (function() { // 构建jQuery对象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); }
// jQuery对象原型 jQuery.fn = jQuery.prototype = { constructor: jQuery, init: function( selector, context, rootjQuery ) { // selector有以下7种分支情况: // DOM元素 // body(优化) // 字符串:HTML标签、HTML字符串、#id、选择器表达式 // 函数(作为ready回调函数) // 最后返回伪数组 } };
// Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn;
// 合并内容到第一个参数中,后续大部分功能都通过该函数扩展 // 通过jQuery.fn.extend扩展的函数,大部分都会调用通过jQuery.extend扩展的同名函数 jQuery.extend = jQuery.fn.extend = function() {};
// 在jQuery上扩展静态方法 jQuery.extend({ // ready bindReady // isPlainObject isEmptyObject // parseJSON parseXML // globalEval // each makeArray inArray merge grep map // proxy // access // uaMatch // sub // browser });
// 到这里,jQuery对象构造完成,后边的代码都是对jQuery或jQuery对象的扩展 return jQuery;
})();
window.jQuery = window.$ = jQuery; })(window); |
l jQuery对象不是通过 new jQuery 创建的,而是通过 new jQuery.fn.init 创建的
var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); } |
n jQuery对象就是jQuery.fn.init对象
n 如果执行new jQeury(),生成的jQuery对象会被抛弃,最后返回 jQuery.fn.init对象;因此可以直接调用jQuery( selector, context ),没有必要使用new关键字
l 先执行 jQuery.fn = jQuery.prototype,再执行 jQuery.fn.init.prototype = jQuery.fn,合并后的代码如下:
jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype |
所有挂载到jQuery.fn的方法,相当于挂载到了jQuery.prototype,即挂载到了jQuery 函数上(一开始的 jQuery = function( selector, context ) ),但是最后都相当于挂载到了 jQuery.fn.init.prototype,即相当于挂载到了一开始的jQuery 函数返回的对象上,即挂载到了我们最终使用的jQuery对象上。
这个过程非常的绕,金玉其外“败絮”其中啊!
3.2 jQuery.fn.init
jQuery.fn.init的功能是对传进来的selector参数进行分析,进行各种不同的处理,然后生成jQuery对象。
处理方式 |
|
DOM元素 |
包装成jQuery对象,直接返回 |
body(优化) |
从document.body读取 |
单独的HTML标签 |
document.createElement |
HTML字符串 |
document.createDocumentFragment |
#id |
document.getElementById |
选择器表达式 |
$(…).find |
函数 |
注册到dom ready的回调函数 |
3.3 jQuery.extend = jQuery.fn.extend
// 合并两个或更多对象的属性到第一个对象中,jQuery后续的大部分功能都通过该函数扩展 // 通过jQuery.fn.extend扩展的函数,大部分都会调用通过jQuery.extend扩展的同名函数
// 如果传入两个或多个对象,所有对象的属性会被添加到第一个对象target
// 如果只传入一个对象,则将对象的属性添加到jQuery对象中。 // 用这种方式,我们可以为jQuery命名空间增加新的方法。可以用于编写jQuery插件。 // 如果不想改变传入的对象,可以传入一个空对象:$.extend({}, object1, object2); // 默认合并操作是不迭代的,即便target的某个属性是对象或属性,也会被完全覆盖而不是合并 // 第一个参数是true,则会迭代合并 // 从object原型继承的属性会被拷贝 // undefined值不会被拷贝 // 因为性能原因,JavaScript自带类型的属性不会合并
// jQuery.extend( target, [ object1 ], [ objectN ] ) // jQuery.extend( [ deep ], target, object1, [ objectN ] ) jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;
// Handle a deep copy situation // 如果第一个参数是boolean型,可能是深度拷贝 if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target // 跳过boolean和target,从第3个开始 i = 2; }
// Handle case when target is a string or something (possible in deep copy) // target不是对象也不是函数,则强制设置为空对象 if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; }
// extend jQuery itself if only one argument is passed // 如果只传入一个参数,则认为是对jQuery扩展 if ( length === i ) { target = this; --i; }
for ( ; i < length; i++ ) { // Only deal with non-null/undefined values // 只处理非空参数 if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ];
// Prevent never-ending loop // 避免循环引用 if ( target === copy ) { continue; }
// Recurse if we're merging plain objects or arrays // 深度拷贝且值是纯对象或数组,则递归 if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { // 如果copy是数组 if ( copyIsArray ) { copyIsArray = false; // clone为src的修正值 clone = src && jQuery.isArray(src) ? src : []; // 如果copy的是对象 } else { // clone为src的修正值 clone = src && jQuery.isPlainObject(src) ? src : {}; }
// Never move original objects, clone them // 递归调用jQuery.extend target[ name ] = jQuery.extend( deep, clone, copy );
// Don't bring in undefined values // 不能拷贝空值 } else if ( copy !== undefined ) { target[ name ] = copy; } } } }
// Return the modified object // 返回更改后的对象 return target; }; |
未完待续
评论
jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype
这个并不绕啊,将jQuery.fn.init的prototype属性设置为jQuery.fn,那么使用new jQuery.fn.init()生成的对象的原型对象就是jQuery.fn,
所以挂载到jQuery.fn上面的函数就相当于挂载到jQuery.fn.init()生成的jQuery对象上。
jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype 对于这句话, 前面的jQuery.fn.init.prototype = jQuery.fn这个赋值很好理解,刚开始我没有弄懂为什么jQuery.fn = jQuery.prototype,貌似没什么必要,是,在 var x = jQuery(yyy);这种情况下,确实是没什么必要, 但是如果是这样写 var x = new jQuery();这种写法,就是必须的了
总之: jQuery.fn.init.prototype = jQuery.fn 是应付 var x = jQuery(yyy);这种写法的jQuery.fn = jQuery.prototype 是应付var x = new jQuery(yyy);这种写法的。
你好,请问为什么 jQuery.fn.init.prototype = jQuery.fn 是应付 var x = jQuery(yyy)???
主要是对 对象的维护 因为只要一旦new 就会去查找实例的静态属性方法和对象的prototype属性,将其copy生成一个新的对象,如果中途修改或增加原型对象的属性,那么也会同时更新这个Object对象,原型对象的属性是被其所有的实例所共享的,所以在修改其属性值的同时也需要额外小心,因为一不小心会影响其它的实例对象,所以对象的prototype在这边的重要性不言而喻 jQuery.fn === jQuery.prototype === jQuery.fn.init.prototype ,最后, jQuery返回的对象的成员和 jQuery.fn 的成员匹配。
不清楚为什么要jquery.prototype.
最终生成的jquery对象原型都是init.prototype吧
没那么复杂, 我想原因很简单 jquery.fn比jquery.prototype短,prototype这玩意不能优化, jquery插件都要引用jquery.fn的,我想这是jquery.fn的作用。至于jquery.fn.init.prototype是为了保护jquery, 比如某个笨蛋刚接触jquery直接用jquery.prototype扩展jquery(这是直觉上最容易想到的方法,js嘛),还是这种错误写法jquery.prototype={...} ,如果没有init.prototype, jquery就不能用了。如果这个笨蛋还写了jquery.fn.init.prototype={...},好吧,这个笨蛋很变态,我给他跪了
不清楚为什么要jquery.prototype.
最终生成的jquery对象原型都是init.prototype吧
jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype
这个并不绕啊,将jQuery.fn.init的prototype属性设置为jQuery.fn,那么使用new jQuery.fn.init()生成的对象的原型对象就是jQuery.fn,
所以挂载到jQuery.fn上面的函数就相当于挂载到jQuery.fn.init()生成的jQuery对象上。
jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype 对于这句话, 前面的jQuery.fn.init.prototype = jQuery.fn这个赋值很好理解,刚开始我没有弄懂为什么jQuery.fn = jQuery.prototype,貌似没什么必要,是,在 var x = jQuery(yyy);这种情况下,确实是没什么必要, 但是如果是这样写 var x = new jQuery();这种写法,就是必须的了
总之: jQuery.fn.init.prototype = jQuery.fn 是应付 var x = jQuery(yyy);这种写法的jQuery.fn = jQuery.prototype 是应付var x = new jQuery(yyy);这种写法的。
你好,请问为什么 jQuery.fn.init.prototype = jQuery.fn 是应付 var x = jQuery(yyy)???
主要是对 对象的维护 因为只要一旦new 就会去查找实例的静态属性方法和对象的prototype属性,将其copy生成一个新的对象,如果中途修改或增加原型对象的属性,那么也会同时更新这个Object对象,原型对象的属性是被其所有的实例所共享的,所以在修改其属性值的同时也需要额外小心,因为一不小心会影响其它的实例对象,所以对象的prototype在这边的重要性不言而喻 jQuery.fn === jQuery.prototype === jQuery.fn.init.prototype ,最后, jQuery返回的对象的成员和 jQuery.fn 的成员匹配。
jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype
这个并不绕啊,将jQuery.fn.init的prototype属性设置为jQuery.fn,那么使用new jQuery.fn.init()生成的对象的原型对象就是jQuery.fn,
所以挂载到jQuery.fn上面的函数就相当于挂载到jQuery.fn.init()生成的jQuery对象上。
jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype 对于这句话, 前面的jQuery.fn.init.prototype = jQuery.fn这个赋值很好理解,刚开始我没有弄懂为什么jQuery.fn = jQuery.prototype,貌似没什么必要,是,在 var x = jQuery(yyy);这种情况下,确实是没什么必要, 但是如果是这样写 var x = new jQuery();这种写法,就是必须的了
总之: jQuery.fn.init.prototype = jQuery.fn 是应付 var x = jQuery(yyy);这种写法的jQuery.fn = jQuery.prototype 是应付var x = new jQuery(yyy);这种写法的。
你好,请问为什么 jQuery.fn.init.prototype = jQuery.fn 是应付 var x = jQuery(yyy)???
这句话是不是有问题哈,如果执行new jquery(),返回的还是jquery对象吧,而不是jquery,fn.init对象,平时我们用jquery()或$()返回的是jquery.fn.init对象。
执行new jquery(),js会创建一个jquery类型的对象jqueryTemp,然后调用jquery()方法,把jquery的执行环境设置为先创建的object,类似于调用jquery.call(jqueryTemp),最后返回jqueryTemp。这是通过new jquery()创建对象时,js底层的执行机制吧,其他的通过new创建对象也是一样的。
构造函数如果有返回值,并且返回值是一个对象,则会丢弃运算符 new 创建的临时对象。这个与 jQuery 无关,属于运算符 new 的知识。
同意!
明白了。谢谢!还是对js基础知识掌握的不牢。在学习中!非常感谢!!!
看了lz的回复又重新温故了一下js的基础知识对于以下经典的例子就容易理解了。
例子代码贴出来:
//例子1
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
//例子2
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
谢谢lz。
明白了。谢谢!还是对js基础知识掌握的不牢。在学习中!非常感谢!!!
jQuery.extend = jQuery.fn.extend = function() {
var options, name, src, copy, copyIsArray, clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false;
// Handle a deep copy situation
// 如果第一个参数是boolean型,可能是深度拷贝
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
// 跳过boolean和target,从第3个开始
i = 2;
}
// Handle case when target is a string or something (possible in deep copy)
// target不是对象也不是函数,则强制设置为空对象
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}
// extend jQuery itself if only one argument is passed
// 如果只传入一个参数,则认为是对jQuery扩展
if ( length === i ) {
target = this;
--i;
}
//…………此处省去 大部分代码
本人对上述代码红色字体中 target = this; this具体指代那个对象,此处叫迷惑。希望lz能在百忙之中帮助解答。谢谢
这句话是不是有问题哈,如果执行new jquery(),返回的还是jquery对象吧,而不是jquery,fn.init对象,平时我们用jquery()或$()返回的是jquery.fn.init对象。
执行new jquery(),js会创建一个jquery类型的对象jqueryTemp,然后调用jquery()方法,把jquery的执行环境设置为先创建的object,类似于调用jquery.call(jqueryTemp),最后返回jqueryTemp。这是通过new jquery()创建对象时,js底层的执行机制吧,其他的通过new创建对象也是一样的。
构造函数如果有返回值,并且返回值是一个对象,则会丢弃运算符 new 创建的临时对象。这个与 jQuery 无关,属于运算符 new 的知识。
这句话是不是有问题哈,如果执行new jquery(),返回的还是jquery对象吧,而不是jquery,fn.init对象,平时我们用jquery()或$()返回的是jquery.fn.init对象。
执行new jquery(),js会创建一个jquery类型的对象jqueryTemp,然后调用jquery()方法,把jquery的执行环境设置为先创建的object,类似于调用jquery.call(jqueryTemp),最后返回jqueryTemp。这是通过new jquery()创建对象时,js底层的执行机制吧,其他的通过new创建对象也是一样的。
你看看这句就明白了 jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype
有上面这句 那么 new jQuery.fn.init() === new jQuery()了 只不过
jQuery() 是返回的 new jQuery.fn.init(); 而 var o = new jQuery(); 这2者是相当的了
这句话是不是有问题哈,如果执行new jquery(),返回的还是jquery对象吧,而不是jquery,fn.init对象,平时我们用jquery()或$()返回的是jquery.fn.init对象。
执行new jquery(),js会创建一个jquery类型的对象jqueryTemp,然后调用jquery()方法,把jquery的执行环境设置为先创建的object,类似于调用jquery.call(jqueryTemp),最后返回jqueryTemp。这是通过new jquery()创建对象时,js底层的执行机制吧,其他的通过new创建对象也是一样的。

jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype
这个并不绕啊,将jQuery.fn.init的prototype属性设置为jQuery.fn,那么使用new jQuery.fn.init()生成的对象的原型对象就是jQuery.fn,
所以挂载到jQuery.fn上面的函数就相当于挂载到jQuery.fn.init()生成的jQuery对象上。
jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype 对于这句话, 前面的jQuery.fn.init.prototype = jQuery.fn这个赋值很好理解,刚开始我没有弄懂为什么jQuery.fn = jQuery.prototype,貌似没什么必要,是,在 var x = jQuery(yyy);这种情况下,确实是没什么必要, 但是如果是这样写 var x = new jQuery();这种写法,就是必须的了
总之: jQuery.fn.init.prototype = jQuery.fn 是应付 var x = jQuery(yyy);这种写法的jQuery.fn = jQuery.prototype 是应付var x = new jQuery(yyy);这种写法的。


jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype
这个并不绕啊,将jQuery.fn.init的prototype属性设置为jQuery.fn,那么使用new jQuery.fn.init()生成的对象的原型对象就是jQuery.fn,
所以挂载到jQuery.fn上面的函数就相当于挂载到jQuery.fn.init()生成的jQuery对象上。
再读感觉也不饶,而是惊叹于如此写法的精妙与必要。
jQuery.fn.init.prototype = jQuery.fn = jQuery.prototype
这个并不绕啊,将jQuery.fn.init的prototype属性设置为jQuery.fn,那么使用new jQuery.fn.init()生成的对象的原型对象就是jQuery.fn,
所以挂载到jQuery.fn上面的函数就相当于挂载到jQuery.fn.init()生成的jQuery对象上。
发表评论
-
[原创] jQuery源码分析-04 选择器-Sizzle-设计思路
2011-11-14 20:59 6971作者:nuysoft/高云 QQ:47214707 Em ... -
[原创] jQuery源码分析-04 选择器-Sizzle-工作原理
2011-11-13 23:45 8011作者:nuysoft/高云 QQ:47214707 EM ... -
[原创] jQuery源码分析-02正则表达式-RegExp-常用正则表达式
2011-10-27 01:29 46816作者:nuysoft/JS攻城师/ ... -
[原创] jQuery源码分析-jQuery中的循环技巧
2011-10-27 00:36 14665作者:nuysoft/JS攻城师/高云 QQ:47214707 ... -
[原创] jQuery源码分析-10事件处理-Event-DOM-ready
2011-10-20 01:20 10745作者:nuysoft/JS攻城师/ ... -
[原创] jQuery源码分析-Java工程师应该向jQuery学习的8点建议
2011-10-18 23:56 12419作者:nuysoft/高云 QQ:47214707 EM ... -
[原创] jQuery源码分析-10事件处理-Event-事件绑定与删除-bind/unbind+live/die+delegat/undelegate
2011-10-18 22:31 15793作者:nuysoft/高云 QQ:47214707 EM ... -
[原创] jQuery源码分析-10事件处理-Event-源码结构
2011-10-17 01:01 12269作者:nuysoft/高云 QQ:47214707 EMail ... -
[原创] jQuery源码分析-07数据缓存-Cache
2011-10-13 19:55 12270作者:nuysoft/高云 QQ:47214707 EMail ... -
[原创] jQuery源码分析-06浏览器测试-Support
2011-10-13 19:19 10074作者:nuysoft/高云 QQ:47214707 EMail ... -
[原创] jQuery源码分析系列目录(持续更新)
2011-10-12 12:30 29513作者:nuysoft/高云 QQ:47214707 E ... -
[原创] jQuery源码分析-10事件处理-Event-概述和基础知识
2011-10-12 00:16 12139作者:nuysoft/高云 Q ... -
[原创] jQuery源码分析-08队列 Queue
2011-10-10 23:48 10935作者:nuysoft/高云 Q ... -
[原创] jQuery源码分析-03构造jQuery对象-工具函数
2011-09-29 23:21 29928作者:nuysoft/高云 QQ:47214707 E ... -
[原创] jQuery源码分析-15AJAX-类型转换器
2011-09-29 02:25 7560作者:nuysoft/高云 QQ:47214707 EM ... -
[原创] jQuery源码分析-如何做jQuery源码分析
2011-09-27 00:22 15148近期在ITEYE陆续写了几篇jQuery源码分析,乐在其 ... -
[原创] jQuery源码分析-17尺寸和大小 Dimensions & Offset
2011-09-25 22:05 7155边读边写,不正确的地方,还请各位告诉我,多多交流共同学习, ... -
[原创] jQuery源码分析-15AJAX-前置过滤器和请求分发器
2011-09-23 00:09 13418边读边写,不正确的 ... -
[原创] jQuery源码分析-00前言开光
2011-09-21 23:42 47156jQuery源码分析 - 前言 jQuery凭借简洁的语法和 ... -
[原创] jQuery源码分析-01总体架构
2011-09-21 23:31 753441. 总体架构 1.1 自调用匿名函 ...
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip