JS对象创建时不能就即时初始化吗
发布网友
发布时间:2022-05-02 00:07
我来回答
共3个回答
懂视网
时间:2022-05-17 06:22
最近使用bootstrap组件的时候发现一个易用性问题,很多简单的组件初始化都需要在JS里面写很多的初始化代码,比如一个简单的select标签,因为仅仅只是需要从后台获取数据填充到option里面,可是从后台取数据就需要js的初始化,所以导致页面初始化的时候js的初始化代码里面出现很多重复的代码,看着很闹心。于是想起bootstrap table里面的data属性来,如果能够直接在html里面使用data-*这种方式来初始化简单的组件,那该多爽。我们先来看看bootstrap table的文档:
可以看到bootstrap table里面几乎所有的属性、事件都可以用data-*这种方式来做,感觉还不错。那博主就要开始研究了。data-*这东西是哪里来的呢?
一、jquery data()初探
网上查了一圈,终于找到data-*的出处了,原来是Jquery和html5里面的,好东西,真是好东西!我们先来看看jquery的API
原始用法如下:
作用其实很明显,就是给元素加某些属性和数据,或者取值。
下面看看data()方法和html5 data-*属性的结合使用
哈哈,这个东西好,通过html5 的data-*设置的值,能够用jquery 的data()方法取到。这里的规则如下:
1)所有的data属性必须以“data-”开头,
2)属性用“-”隔开,
3)jquery里面取属性的时候去掉“data”和“-”即可。
有了这个作为基础,我们就知道如何在标签里面设置属性,然后在js里面取对应的属性了。下面就结合上次封装combobox的例子来说明下。
二、jquery data()实现data-*初始化组件
还记得之前JS组件系列——封装自己的JS组件,你也可以这篇里面封装了一个简单的combobox,可以通过url去后台取数据。那么下面我们仍然在这个组件的基础上做手脚,实现直接在select标签里面添加data-*属性来初始化下拉框组件。
1、js组件封装代码
很明显,就是在页面初始化完成之后通过样式选择器去初始化组件。使用了each,如果有多个.combobox样式,依次去初始化每一个。通过 $.fn.combobox.call($combobox, $combobox.data()); 调用call方法去调用combobox的初始化,call方法里面两个参数分别对应:
1)当前初始化的jquery对象
2)参数列表。这里通过$combobox.data()得到的就是所有html里面的data-*属性。将所有的data-*属性作为参数传入combobox的初始化方法中。
2、html里面通过data-*初始化
指定data-*属性。从上面我们知道这里初始化是通过样式选择器.combobox来初始化组件的,所以就要求,如果想要使用data-*做组件的初始化,必须要设置一个class="combobox"样式,这样后台才取得到需要初始化的标签。
3、后台C#方法
测试代码,没什么好说的。
4、调试效果
得到效果
这样基本就完成通过data-*来初始化组件了。
上面简单演示了下jquery data()方法结合html5 data-*属性的使用。基本上能达到需求:不用多写一行js代码直接初始化标签。使用的时候直接引用jquery.js和jquery.extension.js文件即可。但是我们知道既然是html5里面的特性,那么对浏览器就得有一定的要求了。当然,此用法功能比较初级,但是对于一些简单组件的初始化够用了。
热心网友
时间:2022-05-17 03:30
输入代码是没问题的,请确定你的html代码页面中有<script type="text/javascript">
function load(v){/*执行操作*/}
</script>
类似这样子的函数。也就是对load函数的定义。另外有一个小问题就是,System.Web.HttpContext.Current.Response.Write("<script>window.setInterval(function(){load('test');},1000);</script>");这句话会先于html中javascript脚本的加载,所以如果在页面未加载完成时页面中已经输出了<script>window.setInterval(function(){load('test');},1000);</script>这段脚本,此时会进行执行,因此也就没有回出现无load这个函数了,当然就会报错了。解决这个问题的办法可以是在load函数定义的脚本段后放入一个Literal控件,然后把<script>window.setInterval(function(){load('test');},1000);</script>这段代码放入Literal的Text中(Literal1.Text = "<script>window.setInterval(function(){load('test');},2000);</script>";)。这样子即可解决。追问你到底在说啥呢
热心网友
时间:2022-05-17 04:48
所谓创建类的对象,
是要确定地给这个对象分配足够的能够定义并规范其基本含义的数据空间;
明确一个包含成员对象的类的空间,
首先应明确或预算出其成员对象的空间结构,
也即是要首先初始化其成员对象。
js-对象初始化
对象初始化在JavaScript中可以通过多种方法实现,包括使用`new Object()`、`Object.create()`方法或字面量标记。对象初始化表达式由花括号中的零个或多个键值对组成,描述对象的属性。在ECMAScript 2015中引入了新的标记,但请注意,在不支持的环境中,这些标记会导致语法错误。创建对象时,可以使用包含...
js面向对象 不懂为什么要init进行初始化
这样做也没错,我们的想法是它创建的时候其实就是在做初始化的工作,那干脆就简化它,在new的时候就让他直接自动调用init方法,省去再次手动调用,所以一般都会写成如下形式:function Test(){ this.init.apply(this, arguments);} 在init方法里面一般是做一些事件绑定,界面初始化的工作。
js面向对象为什么要init进行初始化?
在创建子类对象之前,会先创建父类对象。在调用子类构造器之前,在子类构造器中会先调用父类的构造器,默认调用的是父类无参数构造器。如果父类不存在可以被子类访问的构造器,则不能存在子类。如果父类没有提供无参数构造器,此时子类必须显示通过super语句去调用父类带参数的构造器。内核的初始化 内核(K...
js面向对象 不懂为什么要init进行初始化
额 比如你要调用对象,但是每次调用有不同的需求,初始化就不会受到干扰 大概就是这样
javascript创建对象?
没有显示地创建对象直接将属性和方法赋给了this对象没有return语句终于可以识别的对象的类型。使用原型定义对象类似于第一种”直接初始化法“。——其实是一种变种让人看着眼晕。希望本文所述对大家JavaScript程序设计有所帮助。JavaScript中用new操作符创建对象的时候具体发生了什么过程new操作符通过执行自定义...
Js创建对象额几种方式
②多个实例均不是同一个Function的实例。第三种模式:原型模式 说明:1.函数中不对属性进行定义 2.利用prototype属性对属性进行定义 3.同样的,不推荐使用这样方式创建对象缺点:①无法传入参数,不能初始化属性值。 ②如果包含引用类型的值时,改变其中一个实例的值,则会在所有实例中体现。 第四种模式...
JavaScript定义类或函数的几种方式小结_js面向对象
这种方法很好,但是问题是Car的对象指向的是Array指针,Car的两个对象都指向同一个Array数组,其中一个对象car1改变属性对象的引用(数组Array)时,另一个对象car2也同时改变,这是不允许的。 同时该问题也表现在原型不能带任何初始化参数,导致构造函数无法正常初始化。这需要另一种方式来解决:那就是混合的构造函数/...
JS的初始化方法是?
2、写初始化方法,页面顺序执行到初始化方法时初始化 function init() { // 初始化内容 };init(); 3、在body里面写初始化方法. function init(){ // 初始化内容 }
为什么要有js立即执行函数,存在的意义是什么
你的代码在页面代码加载完成之后,不得不执行一些设置工作,比如附加时间处理器,创建对象等等,所有的这些工作只需要执行一次,所以没有理由创建一个可复用的命名的函数,但这些代码也需要一些临时的变量,但初始化过程结束后,就再也不会被用到了,所以将这些变量作为全局变量不是个好主意,所以我们需要...
这句js是什么意思
也就是一个没有任何属性和方法的对象,后面的部分指的是为_ssp_global这个对象里面的属性userConfig赋值{domain:"js2.aimoban.com"} 说白了就是给_ssp_global这个对象的属性userConfig赋值,赋值之前做了个保险就是怕没有_ssp_global这个对象,没有就先初始化,有的话直接赋值了 ...