Если вы используете XSLT 2.0, укажите xpath-default-namespace = "http://www.example.com"
в разделе stylesheet
.
В jQuery свойство fn
является просто псевдонимом свойства prototype
.
Идентификатор jQuery
(или $
) является только функцией конструктора и все экземпляры, созданные с ним, наследуются от прототипа конструктора.
Простая функция-конструктор:
function Test() {
this.a = 'a';
}
Test.prototype.b = 'b';
var test = new Test();
test.a; // "a", own property
test.b; // "b", inherited property
Простая структура, похожая на архитектуру jQuery:
(function() {
var foo = function(arg) { // core constructor
// ensure to use the `new` operator
if (!(this instanceof foo))
return new foo(arg);
// store an argument for this example
this.myArg = arg;
//..
};
// create `fn` alias to `prototype` property
foo.fn = foo.prototype = {
init: function () {/*...*/}
//...
};
// expose the library
window.foo = foo;
})();
// Extension:
foo.fn.myPlugin = function () {
alert(this.myArg);
return this; // return `this` for chainability
};
foo("bar").myPlugin(); // alerts "bar"
jQuery.fn
определяется сокращением для jQuery.prototype
. Из исходного кода :
jQuery.fn = jQuery.prototype = {
// ...
}
Это означает, что jQuery.fn.jquery
является псевдонимом для jQuery.prototype.jquery
, который возвращает текущую версию jQuery. Снова из исходного кода :
// The current version of jQuery being used
jquery: "@VERSION",
fn
буквально относится к jquery prototype
.
Эта строка кода находится в исходном коде:
jQuery.fn = jQuery.prototype = {
//list of functions available to the jQuery api
}
Но реальный инструмент позади fn
это его доступность для подключения ваших собственных функций в jQuery. Помните, что jquery будет родительской областью для вашей функции, поэтому this
будет ссылаться на объект jquery.
$.fn.myExtension = function(){
var currentjQueryObject = this;
//work with currentObject
return this;//you can include this if you would like to support chaining
};
Итак, вот простой пример этого. Предположим, что я хочу сделать два расширения, один из которых помещает синюю границу, и которая окрашивает текст синим цветом, и я хочу, чтобы они были прикованы.
jsFiddle Demo
$.fn.blueBorder = function(){
this.each(function(){
$(this).css("border","solid blue 2px");
});
return this;
};
$.fn.blueText = function(){
this.each(function(){
$(this).css("color","blue");
});
return this;
};
Теперь вы можете использовать их против класса следующим образом:
$('.blue').blueBorder().blueText();
(я знаю, что это лучше всего делать с css, например, с применением разных имен классов, но имейте в виду, что это просто демоверсия, чтобы показать концепцию).
Этот ответ имеет хороший пример полноценного расширения.
css
будет автоматически перебирать их внутренне с каждой. Это был просто пример отображения различий в this
, где внешний - объект jquery, а внутренний ссылается на сам элемент.
– Travis J
9 May 2013 в 19:43
return this
, чтобы разрешить цепочку , чтобы вы могли сделатьfoo("bar").myPlugin().otherPlugin()
– Racing Tadpole 12 February 2015 в 02:44function func1 (a) { ... }
, и здесь свойство будет переменной 'a'var foo = {}; foo.a = 'a'
. – Zack 27 February 2015 в 17:00