特码单双王 thisx thisy
作者:admin      发布时间:2019-06-14
c?再到以假乱真给餐厅打电话预约座位,应该使技术中性进化到技术有人性。AI 算力提升巨大在 2018 年已经问世发售的三款 iPhone 上,来满足日益增加的 On-Device 机器学习和图像处理的需求一个可参考的对象是,但是仍旧低于三星的顶级旗舰售价,三星急了 可在低端市场跟中国厂商硬碰硬有戏吗_科技_环球网 【环球网科技综合报道】三星手机(摘编自3月25日《光明日报》。
也可能会切断目标之外的其他区域,实现体内时间和空间上的基因编辑可控,006.草案显示,解决了历史遗留的管理界限难以分清的问题。加之分散暴露于野外,45亿元,在已发财报的43家企业中,一起听听专家是怎么说的吧!引发内火;或者劳欲过度。
喝酒无度,enumerable:这个属性是否能在for.in循环中遍历出来或在Objectkeys中列举出来value:属性值get()/set(_value):get和set访问器Get/Set 访问器关于get/set访问器它的意思就是用get/set来取代value(其不能和value一起使用)示例如下:var age = 0;ObjectdefineProperty( chenhao 'age' { get: function() { return age+1; } set: function(value) { age = value; } enumerable : true configurable : true });chenhaoage = 100; //调用setalert(chenhaoage); //调用get 输出101(get中+1了);我们再看一个更为实用的例子利用已有的属性(age)通过get和set构造新的属性(birth_year):ObjectdefineProperty( chenhao 'birth_year' { get: function() { var d = new Date(); var y = dgetFullYear(); return ( y - thisage ); } set: function(year) { var d = new Date(); var y = dgetFullYear(); thisage = y - year; } });alert(chenhaobirth_year);chenhaobirth_year = 2000;alert(chenhaoage);这样做好像有点麻烦你说我为什么不写成下面这个样子:var chenhao = { name: "Chen Hao" email: "haoel@hotmailcom" website: "http://coolshellcn" age: 100 get birth_year() { var d = new Date(); var y = dgetFullYear(); return ( y - thisage ); } set birth_year(year) { var d = new Date(); var y = dgetFullYear(); thisage = y - year; }};alert(chenhaobirth_year);chenhaobirth_year = 2000;alert(chenhaoage);是的你的确可以这样的不过通过defineProperty()你可以干这些事:1)设置如 writableconfigurableenumerable 等这类的属性配置2)动态地为一个对象加属性比如:一些HTML的DOM对像查看对象属性配置如果查看并治理对象的这些配置下面有个程序可以输出对象的属性和配置等东西://列出对象的属性function listProperties(obj){ var newLine = "
"; var names = ObjectgetOwnPropertyNames(obj); for (var i = 0; i < nameslength; i++) { var prop = names[i]; documentwrite(prop + newLine); // 列出对象的属性配置(descriptor)动用getOwnPropertyDescriptor函数 var descriptor = ObjectgetOwnPropertyDescriptor(obj prop); for (var attr in descriptor) { documentwrite("." + attr + ': ' + descriptor[attr]); documentwrite(newLine); } documentwrite(newLine); }}listProperties(chenhao);call apply bind 和 this关于Javascript的this指针和C++/Java很类似 我们来看个示例:(这个示例很简单了我就不多说了)function print(text){ documentwrite(thisvalue + ' - ' + text+ '
');}var a = {value: 10 print : print};var b = {value: 20 print : print};print('hello');// this => global output "undefined - hello"aprint('a');// this => a output "10 - a"bprint('b'); // this => b output "20 - b"a['print']('a'); // this => a output "10 - a"我们再来看看call 和 apply这两个函数的差别就是参数的样子不一样另一个就是性能不一样apply的性能要差很多(关于性能可到 JSPerf 上去跑跑看看)printcall(a 'a'); // this => a output "10 - a"printcall(b 'b'); // this => b output "20 - b"printapply(a ['a']); // this => a output "10 - a"printapply(b ['b']); // this => b output "20 - b"但是在bind后this指针可能会有不一样但是因为Javascript是动态的如下面的示例var p = printbind(a);p('a'); // this => a output "10 - a"pcall(b 'b'),香港挂牌高手论坛; // this => a output "10 - b"papply(b ['b']); // this => a output "10 - b"继承 和 重载通过上面的那些示例我们可以通过Objectcreate()来实际继承请看下面的代码Student继承于Objectvar Person = Objectcreate(null);ObjectdefineProperties( Person { 'name' : { value: 'Chen Hao'} 'email' : { value : 'haoel@hotmailcom'} 'website': { value: 'http://coolshellcn'} });PersonsayHello = function () { var hello = "

Hello I am "+ thisname + "
" + "my email is: " + thisemail + "
" + "my website is: " + thiswebsite; documentwrite(hello + "
");}var Student = Objectcreate(Person);Studentno = "1234567"; //学号Studentdept = "Computer Science"; //系//使用Person的属性documentwrite(Studentname + ' ' + Studentemail + ' ' + Studentwebsite +'
');//使用Person的方法StudentsayHello();//重载SayHello方法StudentsayHello = function (person) { var hello = "

Hello I am "+ thisname + "
" + "my email is: " + thisemail + "
" + "my website is: " + thiswebsite + "
" + "my student no is: " + this no + "
" + "my departent is: " + this dept; documentwrite(hello + '
');}//再次调用StudentsayHello();//查看Student的属性(只有 no 、 dept 和 重载了的sayHello)documentwrite('

' + Objectkeys(Student) + '
');通用上面这个示例我们可以看到Person里的属性并没有被真正复制到了Student中来但是我们可以去存取这是因为Javascript用托付实现了这一机制其实这就是PrototypePerson是Student的Prototype当我们的代码需要一个属性的时候Javascript的引擎会先看当前的这个对象中是否有这个属性如果没有的话就会查找他的Prototype对象是否有这个属性一直连续下去直到找到或是直到没有Prototype对象为了证明这个事我们可以使用ObjectgetPrototypeOf()来检验一下:Studentname = 'aaa';//输出 aaadocumentwrite('

' + Studentname + '

');//输出 Chen Haodocumentwrite('

' +ObjectgetPrototypeOf(Student)name + '

');于是你还可以在子对象的函数里调用父对象的函数就好像C++里的 Base::func() 一样于是我们重载hello的方法就可以使用父类的代码了如下所示://新版的重载SayHello方法StudentsayHello = function (person) { ObjectgetPrototypeOf(this)sayHellocall(this); var hello = "my student no is: " + this no + "
" + "my departent is: " + this dept; documentwrite(hello + '
');}这个很强大吧组合上面的那个东西还不能满足我们的要求我们可能期望这些对象能真正的组合起来为什么要组合因为我们都知道是这是OO设计的最重要的东西不过这对于Javascript来并没有支持得特别好不好我们依然可以搞定个事第一我们需要定义一个Composition的函数:(target是作用于是对象source是源对象)下面这个代码还是很简单的就是把source里的属性一个一个拿出来然后定义到target中function Composition(target source){ var desc = ObjectgetOwnPropertyDescriptor; var prop = ObjectgetOwnPropertyNames; var def_prop = ObjectdefineProperty; prop(source)forEach( function(key) { def_prop(target key desc(source key)) } ) return target;}有了这个函数以后我们就可以这来玩了://艺术家var Artist = Objectcreate(null);Artistsing = function() { return thisname + ' starts singing.';}Artistpaint = function() { return thisname + ' starts painting.';}//运动员var Sporter = Objectcreate(null);Sporterrun = function() { return thisname + ' starts running.';}Sporterswim = function() { return thisname + ' starts swimming.';}Composition(Person Artist);documentwrite(Personsing() + '
');documentwrite(Personpaint() + '
');Composition(Person Sporter);documentwrite(Personrun() + '
');documentwrite(Personswim() + '
');//看看 Person中有什么(输出:sayHellosingpaintswimrun)documentwrite('

' + Objectkeys(Person) + '
');Prototype 和 继承我们先来说说Prototype我们先看下面的例程这个例程不需要解释吧很像C语言里的函数指针在C语言里这样的东西见得多了var plus = function(xy){ documentwrite( x + ' + ' + y + ' = ' + (x+y) + '
'); return x + y;};var minus = function(xy){ documentwrite(x + ' - ' + y + ' = ' + (x-y) + '
'); return x - y;};var operations = { '+': plus '-': minus};var calculate = function(x y operation){ return operations[operation](x y);};calculate(12 4 '+');calculate(24 3 '-');那么我们能不能把这些东西封装起来呢我们需要使用prototype看下面的示例:var Cal = function(x y){ thisx = x; thisy = y;}Calprototypeoperations = { '+': function(x y) { return x+y;} '-': function(x y) { return x-y;}};Calprototypecalculate = function(operation){ return thisoperations[operation](thisx thisy);};var c = new Cal(4 5);Calcalculate('+');Calcalculate('-');这就是prototype的用法prototype 是javascript这个语言中最重要的内容网上有太多的文章介始这个东西了说白了prototype就是对一对象进行扩展其特点在于通过"复制"一个已经存在的实例来返回新的实例而不是新建实例被复制的实例就是我们所称的"原型"这个原型是可定制的(当然这里没有真正的复制实际只是委托)上面的这个例子中我们扩展了实例Cal让其有了一个operations的属性和一个calculate的方法这样我们可以通过这一特性来实现继承还记得我们最最前面的那个Person吧 下面的示例是创建一个Student来继承Personfunction Person(name email website){ thisname = name; thisemail = email; thiswebsite = website;};PersonprototypesayHello = function(){ var hello = "Hello I am "+ thisname + "
" + "my email is: " + thisemail + "
" + "my website is: " + thiswebsite; return hello;};function Student(name email website no dept){ var proto = ObjectgetPrototypeOf; proto(Studentprototype)constructorcall(this name email website); thisno = no; thisdept = dept;}// 继承prototypeStudentprototype = Objectcreate(Personprototype);//重置构造函数Studentprototypeconstructor = Student;//重载sayHello()StudentprototypesayHello = function(){ var proto = ObjectgetPrototypeOf; var hello = proto(Studentprototype)sayHellocall(this) + '
'; hello += "my student no is: " + this no + "
" + "my departent is: " + this dept; return hello;};var me = new Student( "Chen Hao" "haoel@hotmailcom" "http://coolshellcn" "12345678" "Computer Science");documentwrite(mesayHello());兼容性上面的这些代码并不一定能在所有的浏览器下都能运行因为上面这些代码遵循 ECMAScript 5 的规范关于ECMAScript 5 的浏览器兼容列表你可以看这里"ES5浏览器兼容表"本文中的所有代码都在Chrome最新版中测试过了下面是一些函数可以用在不兼容ES5的浏览器中:Objectcreate()函数function clone(proto) { function Dummy() { } Dummyprototype = proto; Dummyprototypeconstructor = Dummy; return new Dummy(); //等价于Objectcreate(Person);}var me = clone(Person);defineProperty()函数function defineProperty(target key descriptor) { if (descriptorvalue){ target[key] = descriptorvalue; }else { descriptorget && target__defineGetter__(key descriptorget),黄大仙高手总坛84777; descriptorset && target__defineSetter__(key descriptorset); } return target}keys()函数function keys(object) { var result key result = []; for (key in object){ if (objecthasOwnProperty(key)) resultpush(key) } return result;}ObjectgetPrototypeOf() 函数function proto(object) { return object null : '__proto__' in object object__proto__ : /* not exposed */ objectconstructorprototype}bind 函数var slice = []slicefunction bind(fn bound_this) { var bound_args bound_args = slicecall(arguments 2) return function() { var args args = bound_argsconcat(slicecall(arguments)) return fnapply(bound_this args) }}参考W3CSchoolMDN (Mozilla Developer Network)MSDN (Microsoft Software Development Network)Understanding Javascript OOPname;chenhao.artech.Interface(类库)、Client(控制台应用)和Service(控制台应用)分别定义服务契约、服务(包括服务寄宿)和客户端程序。12 辽宁省沈阳市委常委、市纪委书记2010.09 辽宁师范大学政治系政治专业学习1988.建立可连续的皮肤病人工智能国际性协作模式,目前"智能皮肤"平台自开放使用以来已有 4000 多位认证医生使用,一听脑子里长肿瘤。
一侧肢体无力;⑹一侧面部疼痛或麻木;⑺月经次数减少。